싱글톤 컨테이너

byeol·2022년 11월 21일
0

5. 싱글톤 컨테이너

✔️ 순수 자바 DI 컨테이너
객체를 생성할 때마다 새로 객체를 만든다.

✔️ 메모리 낭비가 심하다 ➡️ 싱글톤 패턴
클래스의 인스턴스가 1개만 생성되도록 순수 자바 코드를 수정
1. private static final 객체를 내부에서 미리 생성
2. get 함수를 통해서만 내부에서 미리 생성된 객체를 얻어서 외부에서 사용할 수 있음
3. 생성자 자체를 private로 선언해서 외부에서는 생성할 수 없음

✔️ 코드의 복잡성, 클라이언트가 구체 클래스 의존,DIP와 OCP 위반➡️ 스프링의 싱글톤 컨테이너
하나를 다같이 공유하여 사용 따라서 상태변수를 넣어주지 않도록 주의하자
final인 정적 변수만 넣어주기

  • @Configuration과 바이트 조작의 마법: @Configuration이 CGLIB 기술을 이용하여 싱글톤 보장

    위 코드를 보면 분명 아래의 코드의 MemberRepository가 3번 호출되어야 한다.

    그러나

    위와 같이 MemberRepository는 한번만 호출되고 계속 재사용되었음을 알 수 있다.
    이는 스프링이 CGIB라는 바이트 코드 조작 라이브러리를 사용하기 때문이다.

    따라서 bean의 클래스를 출력하면 단순히 AppConfig가 아니라 뒤에 XXXCGLIB가 붙어 있는, AppConfig를 상속받은 클래스가 스프링 빈에 등록됨

profile
꾸준하게 Ready, Set, Go!

0개의 댓글