hong's android

[코틀린] object 키워드 본문

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

 

'Develop > Kotlin' 카테고리의 다른 글

[Kotlin] 상속과 위임  (0) 2023.02.21
[Kotlin] 코틀린 인 액션 2장  (0) 2023.01.16
[Kotlin] 코틀린 인 액션 1장  (0) 2023.01.16