Kotlin Companion Object

kotlin 코드를 보다보면 클래스 레벨에 선언된 companion object{ ... } 라는 문구를 볼 수 있다. 이건 뭘까?

자바의 static 과 비슷하다.

대략적인 사용법은 자바 클래스의 static 프로퍼티(클래스 프로퍼티), static 메서드(클래스 메서드) 와 비슷하다. 그러니까 클래스를 인스턴스화 시키지 않고도 companion object{ ... } 부분에 선언된 프로퍼티와 함수에 접근할 수 있다는 것이다.

class MyClass() {

    companion object{
        val prop = 1
        fun say(): String = "Hello"
     } 
}        

fun main() {

    println(MyClass.prop) // 1
    println(MyClass.say()) // Hello

하지만 자바의 static 과는 다르다.

또 하나의 객체가 만들어진 것이다.

companion object 는 두개의 키워드가 조합된 것이다. companion 과 object 이다. object 는 클래스를 싱글턴으로 만드는 키워드이고, 이러한 object 키워드에 companion 키워드가 더해진 것이다.

그러므로, MyClass 내부에 또다른 객체가 생성되었다고 생각하면 된다.

이름을 지을 수 있다.

또 다른 객체이므로 당연히 이름을 지을 수 있다.

class MyClass() {

    companion object MyComp{
        val prop = 1
        fun say(): String = "Hello"
     } 
}        

fun main() {

    println(MyClass.MyComp.prop) // 1
    println(MyClass.MyComp.say()) // Hello
    println(MyClass.prop) // 1
    println(MyClass.say()) // Hello

참고 : 공식 문서

좋은 웹페이지 즐겨찾기