강의 및 책 내용 정리/스프링 핵심원리 기본편
스프링 핵심 원리 기본편 - 싱글톤 패턴
소나무나무
2021. 6. 10. 22:22
Recall
싱글톤패턴이란?
private
싱글톤 패턴의 단점 6가지
싱글톤 컨테이너란?
Notes
- 싱글톤 패턴
- 클래스의 인스턴스가 1개만 생성되는 것을 보장하는 디자인패턴
- 객체 인스턴스가 2개 이상 생성되지 못하도록 막아야함
- private 생성자를 사용해서 외부에서 new로 생성 제한
public class SingletonService { //1. static 영역에 객체를 딱 1개만 생성해둔다. private static final SingletonService instance = new SingletonService(); //2. public으로 열어서 객체 인스터스가 필요하면 이 static 메서드를 통해서만 조회하도록 허용한 다. public static SingletonService getInstance() { return instance; } //3. 생성자를 private으로 선언해서 외부에서 new 키워드를 사용한 객체 생성을 못하게 막는다. private SingletonService() { } }
- 싱글톤 패턴 호출 시
@Test @DisplayName("싱글톤 패턴을 적용한 객체 사용") public void singletonServiceTest() { //private으로 생성자를 막아두었다. 컴파일 오류가 발생한다. //new SingletonService(); //1. 조회: 호출할 때 마다 같은 객체를 반환 SingletonService singletonService1 = SingletonService.getInstance(); //2. 조회: 호출할 때 마다 같은 객체를 반환 SingletonService singletonService2 = SingletonService.getInstance(); //참조값이 같은 것을 확인 System.out.println("singletonService1 = " + singletonService1); System.out.println("singletonService2 = " + singletonService2); // singletonService1 == singletonService2 assertThat(singletonService1).isSameAs(singletonService2); singletonService1.logic(); }
- 싱글톤 패턴 단점
- 싱글톤 패턴을 구현하는 코드 자체가 많이 들어간다.
- 의존관계상 클라이언트가 구체 클래스에 의존한다 ⇒ DIP 위반, OCP 위반
- 테스트하기 어렵다.
- 내부 속성을 변경하거나 초기화 하기 힘들다.
- 자식 클래스를 만들기 어렵다.
- DI를 적용하기 어렵기 때문에 유연성이 떨어진다.