Develop/Kotlin
[코틀린] object 키워드
_hong
2023. 3. 13. 20:17
적은 수정을 해야 되는 경우에도 새로운 클래스를 만들고 객체를 생성하는 것은 비 효율적이다.
클래스 선언과 객체 생성을 동시에 가능하다.
1. 객체 식 (Object expressions)
window.addMouseListener(object : MouseAdapter() {
override fun mouseClicked(e: MouseEvent) { /*...*/ }
override fun mouseEntered(e: MouseEvent) { /*...*/ }
})
추상 클래스나 인터페이스를 구현해서 클래스를 따로 정의하지 않고 사용할 수 있다.
즉, 익명 클래스를 만들 수 있다.
class C {
private fun getObject() = object {
val x: String = "x"
}
fun printX() {
println(getObject().x)
}
}
해당 객체를 변수에 저장하거나 리턴으로 선언할 수 있다.
사용한 곳에서 즉시 객체 초기화와 실행이 된다.
2.객체 선언(Object Declaration)
객체 선언을 통해 간단하게 싱글톤 패턴을 구현할 수 있다.
object DataProviderManager {
fun registerDataProvider(provider: DataProvider) {
// ...
}
val allDataProviders: Collection<DataProvider>
get() = // ...
}
DataProviderManager.registerDataProvider(...)
아무것도 상속받지 않으면 object는 Any 타입을 상속받는다.
처음 object에 접근할때 초기화된다.
2.1 동반 객체 (Companion objects)
코틀린엔 static이 없다 그 대신 동반 객체를 사용할 수 있다.
class MyClass {
companion object Factory {
fun create(): MyClass = MyClass()
}
}
val instance = MyClass.create()
companion object의 이름은 생략하고 호출 가능하다.
companion object는 해당 클래스가 메모리에 올라가면 초기화된다.
Reference.
https://kotlinlang.org/docs/object-declarations.html