object

코틀린에서 object 키워드는 싱글톤 객체를 만들 때 사용된다.

ojbect 클래스 안에는 val, var, method 모두 가질 수 있고, 상속을 받는 것도 가능하다.

object Util : Runnable {
    val width = 300
    var time = 0
    fun doSomething() { }
    override fun run() { }
}

사용할 때는 Util.width, Util.doSomething() 이런 식으로 사용할 수 있다.

object 는 객체를 생성할 수 없다. 코틀린 컴파일러는 object를 클래스로 취급하지 않고 이미 객체인 상태로 취급한다.

내부적으로는 Util클래스의 static 인스턴스라고 표현한다.

companion object

companion object 는 클래스 안에 정의한 싱글톤이다.

class Example {
    companion object {
    	val width = 300 
    }
}

클래스의 companion object 멤버에 접근하려면, 클래스 이름으로 참조하면 된다.

Example.width 이런 식으로 접근할 수 있다.

만약 companion object 객체 자체에 대한 참조가 필요하다면 Example.Companion 이런 식으로 할 수 있다.

또는 companion object에 이름을 붙여서 접근할 수도 있다.

class Example {
    companion object Inner {
    }
}

Example.Inner로 companion object를 참조할 수 있다.

companion object의 멤버가 클래스의 static 멤버가 되는 것은 아니다.

companion object의 멤버에 접근하면 코틀린 컴파일러는 싱글톤 객체로 라우팅한다.

@JvmStatic 어노테이션을 사용해서 static 멤버로 만들 수 있다.

 

차이점

  • 초기화 시점
    • object는 사용할 때 초기화된다.
    • companion object는 클래스가 로드될 때 초기화된다.

'Programming > 언어' 카테고리의 다른 글

[Kotlin] Coroutine 기본 개념, 동작 원리  (0) 2023.03.19
[Kotlin] Delegation  (0) 2023.03.01
[Kotlin] Generics 공변성, 반공변성(out, in)  (0) 2023.02.26
[Kotlin] Data Class  (0) 2023.02.15
[Kotlin] Collection의 View  (0) 2023.02.13

+ Recent posts