싱글톤 패턴은 클래스의 인스턴스를 하나만 생성하도록 보장하는 디자인 패턴입니다.
코틀린에서 싱글톤 패턴을 구현하는 방법에는 여러 가지가 있지만,
그중에서도 대표적으로 사용되는 object 키워드, companion object, enum class 방법을 살펴본 후
각각의 방법을 비교하고 어떤 상황에서 어떤 방법이 가장 적합한지 파악해보려고 합니다.
싱글톤 패턴이란?
싱글톤 패턴은 클래스의 인스턴스를 하나만 생성하도록 보장하는 디자인 패턴입니다.
이를 통해 애플리케이션 전역에서 동일한 객체를 공유할 수 있으며
전역 상태를 유지하거나 공통된 리소스를 사용할 때 유용합니다.
싱글톤 패턴의 필요성
싱글톤 패턴은 주로 다음과 같은 경우에 사용됩니다.
- 네트워크 클라이언트: 한 번의 설정으로 어디서나 사용 가능
- 데이터베이스 접근 객체: 동일한 인스턴스를 사용하여 일관성을 유지
- 공통 설정 관리: 전역 설정 값을 저장하고 사용
- 공용 캐시나 이미지 로더: 메모리 효율성을 높이고 일관된 데이터 접근
코틀린에서 싱글톤 패턴 구현 방법
1. object 키워드
코틀린에서는 object 키워드를 사용하여 쉽게 싱글톤을 구현할 수 있습니다.
이는 클래스 전체를 싱글톤으로 사용할 때 유용합니다.
object AppUtils {
var isDebugMode = false
fun getCurrentTimestamp(): Long {
return System.currentTimeMillis()
}
}
2. companion object
코틀린에서 companion object는 클래스 내부에 싱글톤을 정의할 때 사용합니다.
이는 클래스와 강하게 결합된 정적 멤버를 정의할 때 유용합니다.
class ConfigManager private constructor() {
companion object {
val instance: ConfigManager by lazy { ConfigManager() }
}
fun loadConfig() {
}
}
3. enum class
자바에서 사용했던 방법 중에 하나로 enum class를 사용해서 싱글톤을 구현할 수 있습니다.
enum class를 사용한 싱글톤은 Serializable 인터페이스를 상속받아 직렬화 및 역직렬화를 활용할 수 있습니다.
enum class AppStatus {
INSTANCE;
var currentState = 0
fun changeState(newState: State) {
currentState = newState
}
}
object 키워드, companion object, eum class 비교
구분 | 특징 | 초기화 시점 |
object 키워드 | 간단하고 직관적 | object 객체에 접근할 때 초기화 |
companion object | 클래스와 강하게 결합 | companion object에 접글할 때 초기화, lazy 초기화를 사용하면 해당 멤버에 접근 시 초기화 |
enum class | 직렬화 지원 | 앱 실행 시 초기화 |
어떤 싱글톤 패턴을 사용해야 할까?
싱글톤 패턴을 선택할 때는 특징과 초기화 비용을 고려해야 합니다. 다음은 각 방법을 선택할 때의 기준입니다.
- 간단한 유틸리티 클래스: object 키워드
- 클래스와 밀접한 정적 멤버 및 초기화 비용이 큰 객체 : companion object
- 자바와 호환성 및 직렬화가 필요한 경우 : enum class
결론
코틀린에서 싱글톤 패턴을 구현하는 방법으로 objcet 키워드, companion object, enum class를 알아보았습니다. 각 방법의 장단점을 이해하고 필요한 상황에 따라 적절한 방법을 선택하는 것이 중요합니다. 이를 통해 효율적이고 안전한 싱글톤 패턴을 구현할 수 있습니다.
참고자료
'안드로이드 > 디자인 패턴' 카테고리의 다른 글
안드로이드 디자인 패턴: MVVM 완벽 정리 (0) | 2024.05.27 |
---|---|
안드로이드 디자인 패턴 : MVP 완벽 정리 (0) | 2024.05.25 |
안드로이드 디자인 패턴: MVC 패턴 완벽 정리 (0) | 2024.05.24 |
댓글