Singleton : 객체는 하나만 존재해야하는 것
1. static 영역에 객체 1개만 미리 생성
2. public으로 열어서 객체 인스턴스가 필요 시 static method를 통해서만 조회하도록 허용
3. 생성자를 private로 선언 --> 외부에서 new 키워드 사용한 객체 생성을 못하게 막음

따라서 객체는 미리 1개만 만들어두고, 새로운 객체를 만드는 것을 방지.
getInstance()를 통해 객체를 조회하게끔 하여 모든 사용자가 동일한 객체를 이용하도록 함
* 단점
- 클라이언트가 구체 클래스에 의존 --> DIP, OCP 위반
- 테스트가 어려움
- 내부 속성의 변경이나 초기화가 어려움
- private 생성자로 자식 클래스 만들기 어려움
------> 유연성이 떨어짐
이러한 단점들을 보완하기 위해 스프링 컨테이너를 통해 '싱글톤 컨테이너'로 활용함
- 싱글턴 패턴 적용하지 않아도 객체 인스턴스를 싱글톤으로 관리
- 싱글톤 레지스트 : 싱글톤 객체 생성하고 관리하는 기능
- 코드가 명료하며 DIP, OCP, 테스트, private 생성자로부터 자유롭게 싱글톤 사용 가
* 주의점 : 싱글톤 객체는 상태를 유지하기 설계하면 안됨
- 무상태로 설계해야함 (스프링 컨테이너 내에서 private, static을 사용하면 싱글톤이 깨짐)
- 특정 클라이언트에 의존하는 필드가 있으면 안됨 --> 같은 필드를 사용하기 때문에 값이 갱신된다
--> 각각 지역변수로 해결하면 됨
- 특정 클라이언트가 값을 변경할 수 있는 필드가 있으면 안됨
CGLIB
역할: @Configuration이 붙은 설정 클래스를 상속받아, 싱글톤을 보장하는 로직이 추가된 가짜 프록시 객체를 생성한다.
싱글톤 보장: 메서드가 호출될 때마다 이미 빈이 등록되어 있는지 확인
--> 있으면 기존 것을 사용하고, 없으면 새로 만들어 컨테이너에 등록한다.
주의사항: 상속을 이용하는 기술이기에 메서드는 반드시 오버라이딩 가능해야 한다.
(private, static, final을 쓰면 싱글톤이 깨지거나 에러가 발생하는 이유)
* Component
기존엔 @Bean을 통해 설정 클래스(AppConfig)에서 개발자가 직접 객체를 생성하고 수동으로 연결했었다.
하지만 설정 정보 없어도 Bean 등록과 의존 관계 주입이 가능하다
@Component : 스프링이 클래스를 직접 찾아낸 후 객체를 생성한 후 컨테이너에 Bean을 등록한다.
- 이름 지정 할 땐 @Component("이름")으로 지정
@Autowired : 생성자에 붙여주면, 스프링이 관리하는 Bean 중에서 타입이 맞는 것을 찾아서 자동으로 주입해준다.
@ComponentScan : Component를 할 때 조건들의 집합
- basePackages = "hello.core.member" : member 패키지 범위 안에서만 찾도록 함
- includeFilters / excludeFilters = 특정 조건에 맞는 클래스를 추가 / 제외
* 단축키
Ctrl + Shift + T : 해당하는 Class의 Test 바로 만들기 가능
'공부 > spring' 카테고리의 다른 글
| [Spring] Bean Lifecycle Callback (0) | 2026.04.24 |
|---|---|
| [Spring] 의존관계 자동주입 (0) | 2026.04.23 |
| [Spring] Spring Container & Bean (0) | 2026.04.21 |
| [Spring] AppConfig (0) | 2026.04.20 |
| [Spring] 회원 관리와 주문 시스템 설계 (1) | 2026.04.14 |