Language/Kotlin

[keyword] Companion Object

개랭갱깽스타 2022. 2. 17. 11:22

 

코틀린의 Class 와 Object

Class

생성자는 [keyword] constructor 를 써서 정의한다.

객체 생성: 클래스명()

 

Object

싱글턴(singletone, 인스턴스가 하나만 있는 클래스) 선언 방법

객체 생성: 클래스,인터페이스 확장

var obj = object:MyClass(){}, var obj = object:MyInterface{}

⭕  시스템 전체에서 쓸 기능

❌  전역 상태 유지

 

Companion object

static 이 아니다. 객체다.

클래스가 메모리에 적재되면서 함께 생성되는 동반(Companion) 객체

객체 생성: 클래스명.Companion.멤버 → 클래스명.멤버

 

class MyClass2{
    companion object{
        val prop = "나는 Companion object의 속성이다."
        fun method() = "나는 Companion object의 메소드다."
    }
}

fun main(args: Array<String>) {
    println(MyClass2.Companion.prop)
    println(MyClass2.Companion.method())

    val comp1 = MyClass2.Companion  //--(1) 객체로 
		// 사용
    println(comp1.prop)              
    println(comp1.method())

    val comp2 = MyClass2  //--(2) 객체 생성 후
		// 사용
    println(comp2.prop)
    println(comp2.method())
}
  • 클래스 내 Companion object 는 딱 하나만 쓸 수 있다.
  • 인터페이스 내에도 Companion object 를 정의할 수 있다.
  • 상속 관계에서 Companion object 멤버는 같은 이름일 경우, 가려진다.(Shadowing)

 

.참고

https://www.bsidesoft.com/8187

반응형