싱글톤패턴
- 클래스의 인스턴스가 1개만 생성되는 것을 보장하는 디자인 패턴이다.
- private 생성자를 사용하여 외부에서 new 키워드를 사용하지 못하도록 막는다.
- 스프링 컨테이너가 싱글톤 패턴을 적용시켜준다.
싱글톤 패턴의 단점
- 코드 자체가 많이 들어간다.
- 클라이언트가 구체 클래스에 의존하여 DIP를 위반한다.
- 마찬가지로 OCP 원칙을 위반할 가능성이 높다.
- 속성 변경 및 초기화가 어렵다.
- getInstance()를 사용해야 하기 때문에 유연성이 떨어진다.
- private생성자로 자식 클래스를 만들기 어렵다.
-> 스프링 프레임워크는 싱글톤 패턴의 단점을 제거하며 객체를 싱글톤 패턴으로 관리한다.
스프링 컨테이너
- 스프링 컨테이너는 싱글턴 패턴을 적용하지 않아도, 객체를 싱글톤으로 관리한다.
- 스프링이 관리해주기 때문에 코드가 많이 필요 없다.
- DIP, OCP, private 생성자로부터 자유롭게 싱글톤을 사용할 수 있다.
싱글턴 패턴의 주의점
- 무상태로 설계해야 한다.
- 특정 클라이언트에 의존적이면 안된다.
- 특정 클라이언트에 값을 변경할 수 있는 필드가 있으면 안된다.
- 읽기만 가능하게 해야한다.
- 필드 대신 지역변수, 파라미터 등을 사용해야한다.
필드 선언 X!!
스프링 컨테이너
- @Configuration이 바이트코드를 조작하는 기술을 사용하여 싱글톤이 보장된다.
- @Bean이 붙은 매서드마다 빈의 존재 여부를 파악하여 기존의 빈 혹은 새로운 빈을 반환한다.