-
[패턴] 싱글톤(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) } // 이하 생략... }
주의
싱글톤 패턴을 남발하는건 좋지 못하다. 그 예시로,
- 단순히 위처럼 만든다면 멀티스레드 환경에서는 위험할 수 있으니 주의해야 한다.
- 싱글톤 클래스와 싱글톤을 받아오는 클래스의 결합도가 높아진다.
- 단일 책임 원칙과 개방 폐쇄 원칙을 위반한다.
- 단위 테스트를 하기 힘들다.