인스턴스를 오로지 한 개 만 제공하는 방법
- 인스턴스 여러개가 필요 없는 경우에 사용 환경 세팅에 대한 정보 같은 것.
- 자바에서는 인스턴스를 여러개 만들지 못하게 해야한다.
- 자바에서 enum 을 이용하면 Singleton 을 만들 수 있다. enum 도 메소드와 필드를 가질 수 있기 떄문에.
- 모든 클라이언트들이 단 하나의 객체만 사용하면 되는 경우 (e.g Database 객체) 에는 싱글톤 법칙을 고려해봐라.
- 전역 변수를 좀 더 엄격하게 제어하길 원한다면 싱글톤 패턴으로 만들어서 써라.
- 전역 변수가 가지는 단점은 항상 어플리케이션과 라이프사이클이 동일 하다는 것. 싱글톤은 필요할 때만 생성하고 폐기하도록 할 수도 있다.
- 싱글톤을 사용할 경우 모두 이 객체를 참조하고 있을 거니까 결합도가 높아진다.
- SRP 를 위반한다. 라는 말도 있다. 뭐... (Kotlin 에선 ㄱㅊ)
- 멀티스레드 환경에서 안전하게 사용하는 방법을 고려해야한다. (Kotlin 에서는 신경안써도 됨 ㅇㅇ)
- 필요한 시점에 만들면 되고 어디서든지 접근이 가능하기 때문에 메모리 효율적이다.
- LogManager.getLogger()