스프링이 없는 DI 컨테이너
해결 : 해당 객체가 딱 1개만 생성되고, 공유하도록 설계하면된다 -> 싱글톤 패턴
싱글톤 패턴
- same : 대상의 "주소값"을 비교
- equal : 대상의 "내용"을 비교
- a = "123"; , b = "123";
- a !=b 이고 , a is equal to b 이다.
싱글톤 패턴의 문제점
- 구현하는 코드 자체가 많이 들어간다
- DIP를 위반한다
- OCP 위반을 하기 쉽다 (유연성이 떨어진다)
- 테스트 하기 어렵다
싱글톤 컨테이너
- 스프링 컨테이너는 싱글톤 패턴을 적용 X -> 객체 인스턴스를 싱글톤으로 관리해줌
싱글톤 방식의 주의점
- 여러 클라이언트에서 하나의 같은 객체 인스턴스를 공유하기 때문에 싱글톤 객체는 상태를 유지하게 설계하면 안된다
- 무상태로 설계해야 한다.
@Configuration과 싱글톤
- 스프링은 어떻게든 싱글톤(객체 하나만 호출(중복X))을 지켜준다.
- @Configuration 어노테이션 (스프링 설정 정보에 "무조건"사용)
- 임의의 다른 클래스가 싱글톤이 되도록 보장한다