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 |