Kotlin/포스팅

코틀린 동반 객체

짜집퍼박사(짜박) 2023. 12. 30. 22:44

코틀린의 동반 객체는 클래스 내부에 정의된 객체로서, 해당 클래스의 인스턴스와 무관하게 호출될 수 있는 함수나 프로퍼티를 정의하는 데 사용됩니다. 동반 객체는 클래스의 인스턴스 생성 없이 직접 호출할 수 있으며, 주로 팩토리 메서드나 다양한 유틸리티 메서드를 제공하는 데에 활용됩니다.

 

동반 객체 정의

class MyClass {
    companion object {
        // 동반 객체의 멤버(프로퍼티, 함수 등) 정의
        val property: Int = 42

        fun myFunction() {
            println("Function in companion object")
        }
    }
}

 

동반 객체 사용

fun main() {
    // 동반 객체의 멤버에 접근하기 위해 클래스의 인스턴스를 생성할 필요 없음
    println(MyClass.property)  // 출력: 42

    // 동반 객체의 함수 호출
    MyClass.myFunction()        // 출력: Function in companion object
}

 

주의사항

1. 동반 객체의 이름은 생략 가능: 동반 객체의 이름은 Companion으로 지정되어 있습니다. 그러나 생략할 수 있습니다. 생략할 경우에는 Companion으로 암묵적으로 사용됩니다.

class MyClass {
    companion object {
        // ...
    }
}

// 위의 코드에서 companion 키워드를 생략하고 아래와 같이 사용할 수 있음
class MyClass2 {
    object {
        // ...
    }
}

2. 클래스 내부에서 private 접근 제한자 사용 가능: 동반 객체의 멤버는 기본적으로 클래스 내부에서 private으로 접근됩니다.

class MyClass {
    companion object {
        private val privateProperty: Int = 42
    }

    fun accessPrivateProperty() {
        // 클래스 내부에서는 동반 객체의 private 멤버에 접근 가능
        println(MyClass.Companion.privateProperty)
    }
}

3. 동반 객체는 인터페이스를 구현할 수 있음: 동반 객체는 클래스처럼 인터페이스를 구현할 수 있습니다.

interface MyInterface {
    fun myFunction()
}

class MyClass {
    companion object : MyInterface {
        override fun myFunction() {
            println("Function in companion object")
        }
    }
}

4. 동반 객체의 확장 함수 및 프로퍼티: 동반 객체에도 확장 함수와 확장 프로퍼티를 정의할 수 있습니다.

class MyClass {
    companion object {
        // 동반 객체의 확장 함수
        fun String.myExtensionFunction() {
            println("Extension function for String in companion object")
        }

        // 동반 객체의 확장 프로퍼티
        val String.myExtensionProperty: Int
            get() = length
    }
}

fun main() {
    // 사용
    "Hello".myExtensionFunction()
    println("World".myExtensionProperty)  // 출력: 5
}

동반 객체를 사용하면 클래스의 인스턴스와 관계없이 특정 기능을 제공할 수 있습니다. 주로 팩토리 메서드를 생성하거나 클래스 내부의 상태에 영향을 주지 않고 클래스와 관련된 유틸리티 메서드를 제공하는 데에 활용됩니다.

 

With ChatGPT

'Kotlin > 포스팅' 카테고리의 다른 글

코틀린 고차 함수  (0) 2023.12.30
코틀린 객체 식  (0) 2023.12.30
코틀린 객체 선언  (0) 2023.12.30
코틀린 객체  (0) 2023.12.30
코틀린 지연 계산 프로퍼티와 위임  (0) 2023.12.30