NeuroWhAI의 잡블로그

[Kotlin] object 본문

개발 및 공부/언어

[Kotlin] object

NeuroWhAI 2018. 10. 7. 12:18


package com.neurowhai

class Foo {
    private fun privateObj() = object { val x = 42 }
    fun publicObj() = object { val x = 42 }
    
    fun test() {
        println(privateObj().x)
        //println(publicObj().x) // ERROR!
    }
}

// 객체 선언 (싱글톤)
object Neurowhai {
    fun sayHi() = println("Hi")
    val name = "NeuroWhAI"
}

interface Factory<T> {
    fun create(): T
}

// 동반자(?) 객체
class MyClass {
    var a = 0
    companion object Abc/*이름 생략 가능*/ : Factory<MyClass> {
        override fun create() = MyClass()
    }
    object Data {
        fun sayHi() = println("Hi")
    }
}

fun main(args: Array<String>) {
    MyClass.Data.sayHi()
    //MyClass.sayHi() // 이름 생략 불가능
    
    //val c = MyClass.Abc.create() // 이렇게 해도 문제는 없음
    val c = MyClass.create() // 이름 생략 가능 (마치 static 함수 같은 느낌)
    
    
    print("${Neurowhai.name} : ")
    Neurowhai.sayHi()
    
    
    // 객체 표현식
    val t = Thread(object : Runnable {
        override fun run() {
            c.a = 42
            println("Hello")
        }
    })
    
    t.run()
    t.join()
    
    // 람다
    val t2 = Thread {
        println(c.a)
    }
    
    t2.run()
    t2.join()
}

문법 강좌는 여기서 끝이네요.

얼마 안배운 것 같지만 뭐 맛보기로 한거니 충분한 것 같습니다.




Comments