Hansel
싱글톤 패턴 본문
클래스 인스턴스가 딱 1개만 생성하는것을 보장하는 디자인 패턴
package hello.core.singleton;
public class SingletonService {
private static final SingletonService instance = new SingletonService();
//자기 자신을 가진다. 스태틱으로 => 단 1개만 존재하게 된다.
//스태틱 영역에서 미리 생성해둔다.
//조회시 사용
public static SingletonService getInstance(){
return instance;
//항상 같은 인스턴스 반환함
}
//프라이빗 생성자
//외부에서 생성을 막는다. 프라이빗 생성자
private SingletonService(){
}
public void logic(){
System.out.println("싱글톤 객체 로직 호출");
}
}
일반적인 객체 생성 방법을 사용하면 사용자 조회 때 마다 객체를 생성해서 공간 낭비나 속도 저하의 원인이 될 수 있다.
하지만 싱글톤 패턴을 사용하면 하나의 객체를 공유해서 그러한 문제점을 해결할 수 있다.
싱글톤 패턴은 위의 코드와 같이 클래스 내에 자기 자신을 가지는 필드를 만들고 getInstance를 통해 해당 객체를 확인하도록 한다.
그리고 생성자를 private으로 만들어 외부에서 객체를 생성하지 못하도록 차단한다.
@Test
@DisplayName("싱글톤 패턴 적용한 객체 사용")
void singletonServiceTest(){
SingletonService instance1 = SingletonService.getInstance();
SingletonService instance2 = SingletonService.getInstance();
Assertions.assertThat(instance1).isSameAs(instance2);
}
//자식 만들기 어려움, DIP,OCP 위반, 유연성 떨어짐, 내부 속성 변경 혹은 초기화 어려움
테스트를 해봤을때 instance1 & instance2는 동일한 객체임을 확인할 수 있다.
하지만 싱글톤 패턴만으로는 다양한 문제점이 있다.
싱글톤 컨테이너는 그 문제점을 해결해준다.
'Spring > 기초' 카테고리의 다른 글
| 스프링부트 기초 / 도메인 설정 2 (0) | 2022.02.21 |
|---|---|
| 스프링부트 기초 / Repository & Service (0) | 2022.02.21 |
| 스프링부트 기초 / 도메인 설정 (0) | 2022.02.21 |
| 스프링부트 기초 / 환경설정 (0) | 2022.02.21 |
| 싱글톤 컨테이너 (0) | 2022.02.04 |