- object 키워드를 이용한 싱글톤 패턴
싱글톤으로 구현되어야 하는 클래스를 object 키워드를 사용함으로써 싱글톤으로 구현할 수 있다.object를 사용할 때의 문제점object SingletonClass { val sampleString = "Sample String" } fun main() { if (SingletonObject.sampleString == SingletonObject.sampleString) println("동등성 비교 true") if (SingletonObject.sampleString === SingletonObject.sampleString) println("동일성 비교 ture") } //출력 동등성 비교 true 동일성 비교 true
object를 사용하면 해당 객체의 초기화가 object 객체에 처음 접근될 때 이루어진다. 그 말은 내부의 모든 변수들이 초기화 된다는 뜻이다.
예를 들어 아래 SingletonClass는 firstValue에 접근하면 SingletonClass가 초기화 되기 때문에 secondValue도 초기화된다.
object SingletonClass {
val firstValue = "first"
val secondValue = "second"
}
해결책: 내부 변수들의 초기화 시점 조정
object 자체가 접근 시 메모리에 곧바로 올라가는 것은 막지 못하지만, 내부 변수들을 by lazy를 이용해 생성함으로써 호출될 때 초기화를 지연 될 수 있게 만들 수 있다.
아래와 같이 object 내부의 변수값을 by lazy를 통해 지연 생성(호출될 때 메모리 상에 올라가도록 하는 방법)을 하도록 만들면 된다.
object SingletonClass {
val firstValue = "first"
val lazyValue by lazy { "lazy" }
}
그렇게 한다면 lazyValue는 호출될 때 처음 메모리 상에 올라가도록 할 수 있다.
이 방법을 통해 SingletonClass 내부에 많은 변수가 있을 때 메모리를 많이 잡아먹는 변수들을 지연생성을 하도록 함으로써 메모리를 최적화할 수 있다...