Singleton Pattern은 클래스의 인스턴스를 하나만 생성하도록 보장하고, 해당 인스턴스에 전역적으로 접근할 수 있도록 제공하는 패턴이다. 생성자의 호출이 다른 곳에서 일어난다고 가정할 때, 새로운 인스턴스를 반환하는 것이 아니라 최초에 생성된 인스턴스를 반환한다.
장점
- 메모리 낭비 방지
- 데이터 공유 용이
단점
- 데이터 추적의 어려움
- SOLID의 OCP(개방-폐쇄 원칙)에 위배 가능성 높음
- Multi-Thread 취약 (동시성 문제)
구현 방법에는 여러가지 방법이 있으나, 그 중 가장 많이 사용하고 공유되어지고 있는 예제이다.
public class Singleton {
private Singleton() {}
private static class LazyHolder {
private static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return LazyHolder.INSTANCE;
}
}
정리
- Log/Util과 같은 비슷한 성격으로 사용 하는데에 있어서는 용이하다고 판단 될 수 있지만, 어플리케이션 소스를 구현하는 데에 있어 무분별한 사용은 지양해야 한다.