항해 27일차
https://devmoony.tistory.com/43
https://tecoble.techcourse.co.kr/post/2020-11-07-singleton/
디자인 패턴
1. Singleton Pattern
소프트웨어 디자인 패턴에서 싱글턴 패턴을 따르는 클래스는, 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴한다.
사용 이유?
만약 우리가 만들었던 DI 컨테이너인 요청을 할 때마다 새로운 객체를 생성한다. 요청이 엄청나게 많은 트래픽 사이트에서는 계속 객체를 생성하게 되면 메모리 낭비가 심하기 때문이다.
장점
- 고정된 메모리 영역을 얻으면서 한번의 new로 인스턴스를 사용하기 때문에 메모리 낭비를 방지할 수 있다.
- 싱글톤으로 만들어진 클래스의 인스턴스는 전역이기 때문에 다른 클래스의 인스턴스들이 데이터를 공유하기 쉽다.
단점
- 싱글톤 인스턴스가 너무 많은 일을 하거나 많은 데이터를 공유시킬 경우 다른 클래스의 인스턴스들 간에 결헙도가 높아지기에 개방-폐쇄 원칙을 위배한다.
- 객체 지향 설계 원칙에 어긋나기에 수정이 어렵고 유지보수의 비용이 증가한다.
1-1. 패턴 구현
- static 객체를 통해서 해당 객체를 1개만 생성할 수 있도록 지정한다.
- static 메소드를 통해서 외부에서 생성할 수 있도록 제한한다.
- new 연산자를 통해서 객체를 만드는 것을 private 생성자를 통해서 제한한다.
1-2. 문제점
- 싱글톤 패턴을 구현하는 코드 자체가 많다.
- 의존관계상 클라이언트가 구체 클래스에 의존한다.
- 테스트하기 어렵다.
- 내부 속성을 변경하거나 초기화 하기 어렵다.
- private 생성자로 자식 클래스를 만들기 어렵다.
- 싱글톤 컨테이너
- 스프링에서 위에 단점들을 모두 해결해준다.
즉, 싱글턴 패턴을 사용하게 되면 유연성이 떨어지게 된다는 것이다.