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()
}

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

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


'개발 및 공부 > 언어' 카테고리의 다른 글

[C++] shared_mutex, shared_lock 사용 예시  (0) 2018.10.19
[C++] Memory order  (0) 2018.10.16
[Kotlin] object  (0) 2018.10.07
[C++] 다중 상속시 인스턴스 주소를 얻을 때 주의할 점  (0) 2018.09.30
[Kotlin] Data class, Inner class  (0) 2018.09.29
[Kotlin] 프로퍼티  (0) 2018.09.22

Tag

0 Comments
댓글쓰기 폼