[Design Pattern] 싱글톤 패턴(Singleton Pattern)

싱글톤 패턴(Singleton Pattern)


  • 생성(Creational) 패턴
  • 전역 변수를 사용하지 않고 객체를 하나만 생성 하도록 하며, 생성된 객체를 어디에서든지 참조할 수 있도록 하는 패턴

  • 하나의 인스턴스만을 생성하는 책임이 있으며 getInstance 메서드를 통해 모든 클라이언트에게 동일한 인스턴스를 반환하는 작업을 수행한다.



구조




구현


public class Singleton {

    private static Singleton instance;

    public static Singleton getInstance() {
        if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}
  • synchronized 를 사용해 스레드 경합 문제를 방지할 수 있다.



장단점


  • 장점
    • 최초 한번의 new 연산자를 통해서 고정된 메모리 영역을 사용하기 때문에 추후 해당 객체에 접근할 때 메모리 낭비를 방지
    • 이미 생성된 인스턴스를 활용하니 속도 측면에서도 이점
  • 단점
    • 싱글톤 패턴을 구현하는 코드 자체가 많이 필요하다
    • new 키워드를 직접 사용하여 클래스 안에서 객체를 생성하고 있으므로, 이는 SOLID 원칙 중 DIP를 위반하게 되고 OCP 원칙 또한 위반할 가능성이 높다.
    • 상태값을 가지게 된 경우 멀티 스레드 환경에 주의해야한다.






참조:

좋은 웹페이지 즐겨찾기