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

업데이트:




✅ 싱글톤 패턴 (Singleton Pattern)

애플리케이션이 시작될 때, 어떤 클래스가 최초 한번만 메모리를 할당(static) 하고 해당 메모리에 인스턴스를 만들어 사용하는 패턴이다. 디자인 패턴 중 가장 자주 활용되는 패턴이기도 하지만 가장 많은 비판을 받는 패턴이기도 하다.

싱글톤 패턴은 어떤 클래스를 애플리케이션 내에서 제한된 인스턴스 개수, 주로 하나만 존재하도록 강제하는 패턴이다. 이런 단일 오브젝트는 애플리케이션 내에서 전역적으로 접근이 가능하다. 단일 오브젝트로만 존재해야 하고, 이를 애플리케이션의 여러 곳에서 공유하는 경우에 주로 사용한다.





✅ 싱글톤 패턴 사용 이유

객체는 생성할 때마다 메모리 영역을 할당받아야 한다. 하지만 싱글톤 패턴을 사용하면 단 한번의 new를 통해 객체를 한번만 생성하고 활용함으로써 메모리 낭비를 방지할 수 있다. 또한 싱글톤 패턴으로 구현한 인스턴스는 전역변수이므로 다른 클래스의 인스턴스들이 데이터를 공유 할 수 있다.





✅ 싱글톤 패턴 장점

  • 고정된 메모리 영역을 얻으면서 한번의 new로 인해 메모리 낭비 방지

  • 전역 인스턴스이므로 다른 클래스의 인스턴스들이 데이터를 공유하기 쉽다.

  • 인스턴스가 절대적으로 한 개만 존재하는 것을 보증한다.

  • 두번째 이용시 부터는 객체 로딩시간이 줄어 성능이 좋아진다.





✅ 싱글톤 패턴 단점

  • 싱글톤 인스턴스가 너무 많은 책임을 가진 경우 다른 클래스의 인스턴스들 간에 결합도가 높아져 “개방-폐쇄 원칙”을 위배하게 된다.

    개방폐쇄원칙 : ‘ 클래스나 모듈은 확장에는 열려있어야 하고 변경에는 닫혀있어야 한다. ‘

  • 멀티 스레드 환경에서 동기화 처리를 하지 않은 경우, 인스턴스가 2개가 생성 될 수도 있다.

  • 반드시 싱글톤이 필요한 상황이 아니면 사용을 지양하는 것이 좋다.



✅ 싱글톤 패턴 예제

public class Singleton {

    private static Singleton instance = new Singleton();
    
    private Singleton() {
        // 생성자는 외부에서 호출못하게 private 으로 지정해야 한다.
    }

    public static Singleton getInstance() {
        return instance;
    }

    public void say() {
        System.out.println("hi, there");
    }
}

댓글남기기