Java Spring

싱글톤 패턴, 싱글톤 컨테이너

pearl.k 2023. 7. 3. 19:12
  1. 싱글톤 패턴
    • 여러 가지 디자인 패턴 종류 중의 하나, 하나의 클래스 -> 하나의 객체 인스턴스만 가짐 (클래스의 인스턴스가 딱 한 개만 생성되는 것을 보장하는 디자인 패턴)
    • 해당 객체가 딱 한 개 생성되고, 생성된 객체 인스턴스를 여러 곳에서 공유하게 만들 수 있음 (여러 번 호출해도 같은 객체 인스턴스를 반환하는 것을 확인 가능)
    • 싱글톤 패턴으로 만들어진 클래스의 인스턴스는 전역 인스턴스라서 다른 클래스의 인스턴스들이 데이터를 공유할 수 있음
  2. 싱글톤 패턴의 단점, 문제점
    • 싱글톤 인스턴스를 여러 곳에서 많이 공유할 경우 다른 클래스의 인스턴스 간 의존성이 높아질 위험
    • 싱글톤 패턴 구현하는 코드 많이 필요
    • 의존 관계에서 클라이언트가 구체 객체에 의존하여 DIP 원칙 위반함
    • 의존 관계에서 클라이언트가 구체 객체에 의존하여 OCP 원칙을 위반할 가능성 큼
    • 테스트 하기 어렵고, 유연성이 많이 떨어지는 패턴임
  3. 싱글톤 컨테이너
    • 스프링 컨테이너는 싱글톤 패턴의 문제점을 해결하면서 객체 인스턴스롤 싱글톤(1개)로 관리함
    • 스프링 컨테이너는 객체 인스턴스를 한 개만 생성하도록 관리하며 이는 곧 싱글톤이므로 싱글톤 컨테이너의 역할을 하는 것이다!! (이 기능 -> "싱글톤 레지스트리"라고 부름)

(1) 우리가 배운 개별 DI 컨테이너

(2) 싱글톤 패턴을 적용한 컨테이너: memberService 객체를 1개만 생성하고 여러 명의 클라이언트가 공유하고 있음