싱글톤 패턴
클래스의 인스턴스가 딱 1개 만 생성되는 디자인 패턴
객체 인스턴스 2개 이상 생성 막아야 함.
private 생성자 사용해 외부에서 임의로 new 사용 막아야 함.
요청 올때마다 객체 생성하는 것이 아니라, 이미 만들어진 객체 공유해 효율적으로 사용.
문제점
코드 많이 소요
클라이언트가 구체 클래스에 의존 -> DIP 위반
ㄴ 구체 클래스 참조해 getInstance() 호출. 해당 인스턴스 참조 가져와야 함.
싱글톤 컨테이너
스프링 컨테이너는 싱글톤 패턴 적용 안해도, 객체 인스턴스 싱글톤으로 관리.
스프링 컨테이너가 싱글톤 컨테이너 역할 -> 싱글톤 객체 생성/관리하는 기능을 싱글톤 레지스트리라고 함.
싱글톤 방식의 주의점
싱글톤 객체는 전역에서 공유되는 객체 -> 멀티쓰레드 환경에서의 동시성 문제를 해결해야 함.
전역에서 공유 -> 메모리 영역에서 프로세스 전체에서 공유 -> 개별 쓰레드당 할당되는 것이 아님.
공유변수의 동시성 문제
객체 인스턴스 하나만 생성해 공유하는 경우 무상태(stateless)로 설계해야 함.
<참고>
ttps://velog.io/@syleemk/Spring-Core-싱글톤-컨테이너