1- 싱글톤 패턴
- 클래스의 인스턴스가 딱 한 개만 생성되는 것을 보장하는 디자인 패턴임
- 그래서 객체 인스턴스가 두 개 이상 생성하지 못하도록 막아야함
private 생성자를 사용해 외부에서 임의로 new 키워드를 사용하지 못하도록 막아야함 - 생성 방법
(1) static 영역에 객체 instance를 미리 하나 생성해 올림
(2) 해당 객체 인스턴스가 필요하면 오직 getInstance( ) 메서드를 통해서만 조회 가능. 해당 메서드를 호출하면 항상 같은 인스턴스 반환
(3) 딱 한 개의 객체 인스턴스만 존재해야 하믐로, 생성자를 private로 막아 혹시라도 외부에서 new 키워드로 객체 인스턴스가 생서되는 것을 막음 - 그렇다면 일일히 AppConfig에 있는 것들을 싱글톤으로 만들어줘야하는가?
놉! 스프링 컨테이너를 사용하면 기가막히게 객체를 다 싱글턴으로 만들어줘서 관리할 수 있음.
2- 코드 테스트 후
- 호출할 때 마다 같은 객체 인스턴스를 반환하는 것을 확인할 수 있음
- 참고로, 싱글톤 패턴 구현 방법은 여러가지가 존재하며, 여기서는 객체를 미리 생성해두는 가장 단순하고 안전한 방법을 선택한 것임.
지연 처리 방법이 있는데 사실 객체 인스턴스가 많은 메모리를 먹는게 아니면 이 방법이 가장 간단함. - 이미 만들어진 객체를 공유해 효율적 사용 가능
3- 싱글톤 패턴 문제점
- 시글톤 패턴 구현 코드 자체가 많이 들어감
- 의존관계상 클라이언트가 구체 클래스에 의존함 -> DIP 위반
- 클라이언트가 구체 클래스에 의존해 OCP 위반 가능성이 높음
- 미리 생성되어 유연한 테스트가 어려움
- 내부 속성을 변경하거나 초기화하기 어려움
- private 생성자로 자식 클래스를 만들기 어려움
- 유연성이 떨어짐
- 위와 같은 사유로 안티패턴으로 불리기도 함
4- 그러나, 스프링 프레임워크는 이 싱글톤 패턴의 문제점을 전부 해결하고 객체를 싱글톤으로 관리해줌
'Development > Spring Boot' 카테고리의 다른 글
[Spring Boot] 싱글톤 컨테이너 (Singleton container) (0) | 2022.08.16 |
---|---|
[Spring Boot] 웹 애플리케이션과 싱글톤 (0) | 2022.08.16 |
[Spring Boot] 스프링 빈 설정 메타 정보 - BeanDefinition (중요) (0) | 2022.08.15 |
[Spring Boot] 다양한 설정 형식 지원 - 자바 코드, XML (0) | 2022.08.15 |
[Spring Boot] Bean factory와 ApplicationContext (중요) (0) | 2022.08.14 |