코틀린에서의 컴패니언 객체에 대해 알아봅니다.
1. 컴패니언(companion)
코틀린은 static 키워드가 없는 대신 companion객체를 제공합니다.
컴패니언 객체는 프로그램 실행 시 독립적인 메모리 공간을 할당받습니다.
따로 인스턴스화 할 필요가 없으며 어떤 객체라도 동일한 참조 값을 갖고 있어 해당 클래스의 상태에 관계없이 접근할 수 있습니다.
따라서 모든 객체에 의해 공유되는 효과를 갖습니다.
다음 예시를 통해 컴패니언 객체를 사용하는 방법에 대해 알아봅시다
class Person{
var id: Int = 0
var name: String = "smoh"
companion object {
var language: String = "Korean"
fun work(){ println("working ...") }
}
}
fun main() {
println(Person.language)
Person.language = "English"
println(Person.language)
Person.work()
//println(Person.name)
}
- companion object : 컴패니언 객체를 선언합니다. 해당 객체의 내부에 선언된 내용은 프로그램 시작 시 초기화되어 바로 사용할 수 있습니다.
- //println(Person.name) : 컴패니언 객체 외부의 프로퍼티를 사용하기 위해선 초기화가 먼저 필요합니다.
위 코드를 실행하면 다음과 같은 결과를 확인할 수 있습니다
컴패니언 객체는 주로 실제 객체의 싱글톤(Singleton)으로 정의됩니다.
이는 전역 변수를 사용하지 않고 객체를 하나만 생성하도록 하며 생성된 객체를 어디서든 참조하도록 하기 위함입니다.
이와 같이 하면 객체가 동일한 정보를 가질 때 하나의 메모리만 유지해 메모리를 절약할 수 있는 장점이 있습니다.
반응형
'Programming' 카테고리의 다른 글
[Kotlin] 31. 인터페이스 (0) | 2019.09.12 |
---|---|
[Kotlin] 30. 추상 클래스 (0) | 2019.09.05 |
[Kotlin] 28. 위임(Delegation) (0) | 2019.09.01 |
[Kotlin] 27. 지연 초기화: lazy (0) | 2019.08.27 |
[Kotlin] 26. 지연초기화: lateinit (0) | 2019.08.27 |