Clean Code

[Design Pattern] 생성 패턴 - 싱글톤 패턴

yaini 2022. 3. 3. 00:58
반응형

싱글톤 패턴

한 클래스에 한 인스턴스만 존재하도록 제한하는 패턴

특징

  • 기본 생성자가 private
  • static 팩토리 메소드인 getInstance
  • 인스턴스를 저장할 static 필드

장점

  • 하나의 인스턴스만 생성하므로 메모리 낭비를 방지할 수 있다.
  • static으로 전역으로 사용되는 인스턴스이기 때문에 데이터 공유가 쉽다.

단점

  • 여러 스레드에서 동시에 접근 할 수 있으므로 동시성 문제 유의하여 설계해야 한다.
  • 단위 테스트는 격리된 환경에서 실행되어야 하지만, 싱글톤 패턴은 전역에서 사용하기 때문에 테스트가 어렵다.
  • new 키워드를 직접 사용하여 클래스 안에서 객체를 생성하게 되므로 SOLID 원칙 중 DIP를 위반한다.
  • 생성자가 private으로 선언되어 상속이 불가능하므로 자식 클래스를 생성할 수 없다.
  • 상태를 가질 수 없다.

전체 코드

public class Singleton {
    public static void main(String[] args){
        IdentificationCard.getInstance();
    }
}

class IdentificationCard{

    private static IdentificationCard instance;

    private IdentificationCard(){};

    public static IdentificationCard getInstance(){
        if( instance == null ) {
            return new IdentificationCard();
        }else{
            return instance;
        }
    }
}

 

단점이 너무 많아서 잘 사용하지 않을 것 같지만 스프링 프레임 워크의 bean은 모두 싱글톤이다.

싱글톤의 단점들을 보완하여 스프링에서 싱글톤 객체를 관리해준다.

또한 이런 싱글톤 패턴들의 단점들을 보완한 패턴들도 많이 있다.

시간이 나면 정리해보는걸로🤔

반응형