ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [패턴] 싱글톤(Singleton) 패턴
    카테고리 없음 2024. 4. 3. 11:36

    정의

    객체의 인스턴스가 메모리에 한개만 생성되는 패턴이다.

    메모리 절약을 위해 인스턴스를 다시 만들지 않고 기존의 인스턴스를 가져와서 사용하는 방식이며,

    어디서든지 데이터 접근이 가능해진다.

     

    사용법

    클래스의 companion에 UserRegistry를 저장하고 있다가 필요할 때 꺼내갈 수 있는 getInstance() 함수를 놓아주면 된다.

    data class User(
        val id: String,
        val password: String,
        val name: String
    )
    
    class UserRegistry {
    
        companion object {
            private var userRegistry: UserRegistry? = null
    
            fun getInstance(): UserRegistry {
                return userRegistry ?: UserRegistry().apply { userRegistry = this }
            }
        }
    
        private val users = mutableListOf<User>()
    
        fun addUser(user: User) {
            users.add(user)
        }
        
        // 이하 생략...
    }

     

    주의

    싱글톤 패턴을 남발하는건 좋지 못하다. 그 예시로,

    1. 단순히 위처럼 만든다면 멀티스레드 환경에서는 위험할 수 있으니 주의해야 한다.
    2. 싱글톤 클래스와 싱글톤을 받아오는 클래스의 결합도가 높아진다.
    3. 단일 책임 원칙과 개방 폐쇄 원칙을 위반한다.
    4. 단위 테스트를 하기 힘들다.
Designed by Tistory.