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

반달곰수·2024년 3월 12일
0

싱글톤 패턴


  • 객체의 인스턴스가 오직 1개만 생성되는 패턴
  • 생성자가 여러 차례 호출되더라도 , 실제 인스턴스는 1개이고 , 최초 생성 이후 생성자는 최초의 생성자가 생성한 객체를 리턴 함
	//간단한 싱글톤 패턴의 예제
	public class Singleton {
    private static Singleton instance;

    private Singleton() {
    }

    
    public static synchronized Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}

싱글톤 패턴의 이점


  • 메모리 이득
    • 최초 한번의 생성자를 통해 고정된 메모리 영역을 사용하기 때문에 추후 해당 객체에 접근할 때 메모리 낭비를 방지할 수 있다
    • 또한 이미 생성된 인스턴스를 활용하니 속도 측면에서 이점이 있음
  • 데이터 공유가 쉬움
    • 싱글톤 인스턴스는 전역으로 사용되는 인스턴스이기 때문에 , 다른 클래스의 인스턴스들이 접근하여 사용할 수 있음
    • 물론 여러 클래스 인스턴스가 싱글톤 인스턴스의 데이터에 동시 접근 할 때 동시성 문제가 발생할 수 있으므로 이 점을 유의해서 설계하는 것이 좋음
  • 위와 같은 이점 덕분에 데이터베이스 커넥션 풀 , 스레드 풀 , 캐시 , 로그 기록 객체 , 스프링 빈 등에서 사용함

싱글톤 패턴의 문제점


  • 테스트하기 어려움
    • 싱글톤 인스턴스는 자원을 공유하고 있기 때문에 테스트가 결정적으로 격리된 환경에서 수행 되려면 매번 인스턴스의 상태를 초기화 시켜주어야함 (어플리케이션 전역에서 상태를 공유하기 때문에 테스트가 온전하게 수행되지 못하기 때문)
  • OCP , DIP 원칙을 위반할 가능성이 높음
    • 클라이언트가 구체 클래스에 의존하고, new 키워드를 직접 사용하여 클래스안에서 객체를 생성하고 있기 때문
  • 자식 클래스를 만들 수 없음
  • 내부 상태를 변경하기 어려움

참고


싱글톤(Singleton) 패턴이란?

예제

https://github.com/bandalgomsu/Ex

0개의 댓글