순수 의존성 주입 컨테이너 - 클라이언트 요청마다 생성하는 문제 - 메모리 낭비
객체 하나만 생성하고 공유하도록 설계하여 해결
= 싱글톤 패턴
싱글톤 패턴
-> 클래스의 인스턴스가 단 하나만 생성되도록 보장하는 디자인 패턴
-> private 접근지정자로 설정 - new 연산자를 활용한 (동적할당) 외부에서의 접근, 객체 인스턴스 추가 생성을 방어함
private 접근지정자로 선언되었으므로 getter 메서드를 통해서만 조회 가능하고 해당 메서드 호출하면 항상 같은 인스턴스를 반환함
싱글톤 패턴이 언제나 좋기만 한가? - 당연히 NO
구현하는 코드가 길어짐
클라이언트가 구체 클래스에 의존하게 되는데 DIP 위반, OCP 위반
내부 속성 변경 및 초기화 難 (어려울 난)
Private 접근지정자로 인해 자식 클래스 생성이 어려우니 유연성 감소
스프링 컨테이너는 싱글톤 패턴 적용 없이도 객체 인스턴스를 싱글톤 패턴으로 관리
싱글톤 레지스트리 = 싱글톤 객체 생성 및 관리 기능
장점
싱글톤 패턴을 위한 코드 불필요
자유롭게 싱글톤 사용 가능 (From DIP, OCP, private)
단점
싱글톤 패턴의 객체는 상태 유지하게 설계하는 것이 아닌 무상태로 설계해야함
- 특정 클라이언트 의존적 필드 포함 x
- 특정 클라이언트가 값 변경 가능한 필드 포함 X
- read 모드
- 공유 불가한 값인 지역변수, 파라미터 등을 사용
'[ Development ] > [ Back-end ] Spring 기본' 카테고리의 다른 글
[Spring/Swagger] 스프링부트에서 Swagger 사용하기 :: springdoc-openapi-ui 라이브러리 (0) | 2024.02.15 |
---|---|
[Spring 스프링 기본] 의존관계 자동 주입 (0) | 2023.12.26 |
[Spring 스프링 기본] 컴포넌트 스캔 (1) | 2023.12.05 |
[Spring 스프링 기본] 스프링 컨테이너와 스프링 빈 (0) | 2023.11.21 |
[Spring 스프링 기본] 객체 지향 원리 적용 (0) | 2023.11.14 |
[Spring 스프링 기본] 2. 핵심 원리 이해 1 - 예제 만들기 (0) | 2023.11.07 |
[Spring 스프링 기본] 1. 객체지향설계와 스프링 (0) | 2023.10.22 |