싱글톤 패턴이 뭐에요?
하나의 클래스에 하나의 인스턴스만 생성되는 것을 보장하는 디자인 패턴 -!
스프링은 주로 웹 어플리케이션을 개발할 때 사용한다. 웹 어플리케이션은 사용자의 요청이 참 많고 동시에 이뤄지는 경우가 많다. 이러한 요청 때마다 객체가 만들어진다면 메모리 낭비가 심하다.
그래서
static으로 객체를 1개를 생성한 후 private으로 생성자를 선언하여 외부에서 new 를 이용해 객체 생성하는 것을 막는다면
싱글톤 패턴을 구현할 수 있다.
이를 이용하면 고객의 요청마다 객체를 생성하는 것이 아니라, 이미 만들어진 객체를 공유해서 효과적으로 사용할 수 있다. 하지만 여러 문제점이 존재한다.
싱글톤을 구현하는 코드가 꽤 필요하고, 구체 클래스에 의존하여 DIP를 위반하고, 테스트가 어려우며 private 생성자로 인해 자식 클래스를 만들기 어렵다는 점 등 많은 문제점들이 있다.
하지만 이 단점들은 spring이 전부 해결한다-!!
싱글톤 컨테이너
스프링 컨테이너는 앞서 언급한 싱글톤의 문제점을 해결하면서,
싱글톤 패턴을 따로 적용하지 않아도 객체 인스턴스를 싱글톤으로 관리한다.
HOW?
@Configuration을 통해 바이트코드를 조작하는 CGLIB 기술을 사용할 수 있다.
이 기술은 AppConfig를 상속받는 클래스를 만들어서 그 클래스를 AppConfig로 등록한다.
그 임의로 만든 클래스가 싱글톤이 보장되도록 만들어준다.
주의점
여러 클라이언트가 같은 인스턴스를 공유하여 사용하기 때문에 싱글톤 객체는 상태를 유지하게 설계하면 안된다.
즉 stateful하게 설계하면 안되고 (무상태) stateless로 설계해야 한다.
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
'개발공부 > [spring]김영한_스프링입문' 카테고리의 다른 글
Thymleaf가 뭔데? (0) | 2022.08.09 |
---|---|
의존관계 주입 방법에는 뭐가 있을까? (0) | 2022.08.08 |
스프링 컨테이너와 스프링 빈_(feat.BeanDefinition) (0) | 2022.08.04 |
DI(의존관계 주입)와 DI 컨테이너 (0) | 2022.08.04 |
좋은 객체 지향 설계의 원칙(SOLID) (0) | 2022.08.04 |