본문 바로가기
안드로이드/디자인 패턴

코틀린 싱글톤 패턴: 어떤 방법이 좋을까?

by 시작이반의반 2024. 6. 13.

코틀린 싱글톤 패턴
싱글톤 패턴

싱글톤 패턴은 클래스의 인스턴스를 하나만 생성하도록 보장하는 디자인 패턴입니다.

코틀린에서 싱글톤 패턴을 구현하는 방법에는 여러 가지가 있지만,

그중에서도 대표적으로 사용되는 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를 알아보았습니다. 각 방법의 장단점을 이해하고 필요한 상황에 따라 적절한 방법을 선택하는 것이 중요합니다. 이를 통해 효율적이고 안전한 싱글톤 패턴을 구현할 수 있습니다.

 

 

참고자료

Object declarations

 

Object expressions and declarations | Kotlin

 

kotlinlang.org

Java Singletons Using Enum

 

Java Singletons Using Enum - DZone

Using enums might be the best way to create singleton classes. Let's consider some common ways singletons are made, their flaws, and where enums come in.

dzone.com

댓글