개요
companion object가 초기화되고 삭제되는 시점에 대해 궁금해했고, 주변 동기들에게 물어봐도 엥? 흠 언제지...? 클래스 사라질때? 얘도 싱글톤 아니야? 등등 의견이 분분했다. 그래서 이와 관련한 내용을 내 궁금증 해결을 위해서 정리할 필요가 있다고 생각했다!
Object
싱글톤 인스턴스를 간편하게 생성하기 위해 Koltin에서 제공해주는 것이다.
싱글톤 패턴?
간단하게 말하면 하나의 인스턴스만 만들어 놓고, 얘를 전체에서 사용하는 것이다. 주로 공통된 객체를 생성하여 사용하는 경우에 많이 사용한다.
이 싱글톤 패턴을 사용하기 위해 kotlin에서는 object 키워드를 만들었다.
특징을 살펴 보자면,
-> 프로퍼티, 메서드, 초기화 블록을 가질 수 있지만 생성자를 가질 수 없다
-> 클래스를 상속받을 수 있고 여러 인터페이스를 구현할 수 있다.
object Coffee {
val coffeeList = mutableListOf<String>()
fun addCoffee(value : String){
coffeeList.add(value)
}
}
다음과 같이 Class 대신 Object 키워드를 붙여서 Coffee를 정의했고,
fun main(){
Coffee.run {
addCoffee("아메리카노")
addCoffee("카페라떼")
}
println(Coffee.coffeeList) //[아메리카노, 카페라떼]
}
코드를 다음과 같이 작성하면, 인스턴스가 단 하나 만들어지는 클래스를 만들고, 그 인스턴스를 사용할 때 클래스 이름을 통해서 초기화 없이 사용이 가능하다.
초기화 및 삭제 시점
object는 실제 사용 될 때까지 초기화가 지연된다.
또한, 애플리케이션이 수명 주기 동안 메모리에 유지되며, 애플리케이션이 종료될 때 삭제된다고 한다.
Companion Object
코틀린의 Companion Object는 자바의 static과 비슷하게 구현이 가능하다.
즉, 클래스 안에 companion object 키워드를 작성한 후, 그 안에 클래스의 프로퍼티나 메소드를 선언하면, 외부에서 이 프로퍼티나 메소드에 대한 접근이 가능하다.
class MyClass {
companion object {
fun doSomething() {
println("노래방 가고 싶다")
}
}
fun instanceMethod() {
println("노래방 가고 싶다.")
}
}
fun main() {
MyClass.doSomething() //노래방 가고 싶다.
val instance = MyClass()
instance.instanceMethod() // 노래방 가고 싶다.
}
companion object 안에 정의한 doSomething() 메소드의 경우 MyClass의 인스턴스 객체를 생성하지 않고, 클래스 이름으로 직접 접근이 가능하다.
초기화 및 삭제 시점
해당 companion object가 있는 클래스가 로딩되는 시점에 초기화 된다.
일반적으로 클래스가 메모리가 제거되면 companion object도 함께 제거 된다.
'Language > kotlin' 카테고리의 다른 글
[Kotlin] Flow - 소개 및 연산자 (8) | 2024.09.29 |
---|---|
[Kotlin] 고차 함수와 람다 표현식 (1) | 2024.08.10 |
[Kotlin] lateinit & lazy (0) | 2024.08.08 |
[Kotlin] 오버로딩 & 오버라이딩 (0) | 2024.08.08 |
[Kotlin] Coroutine (0) | 2024.07.23 |