개발공부/[spring]김영한_스프링입문

싱글톤과 스프링 컨테이너

개발자 덕구🐾 2022. 8. 4. 14:54
728x90

 

 

 

 

 

싱글톤 패턴이 뭐에요?

 

하나의 클래스에 하나의 인스턴스만 생성되는 것을 보장하는 디자인 패턴 -! 

 

스프링은 주로 웹 어플리케이션을 개발할 때 사용한다. 웹 어플리케이션은 사용자의 요청이 참 많고 동시에 이뤄지는 경우가 많다. 이러한 요청 때마다 객체가 만들어진다면 메모리 낭비가 심하다. 

 

 

그래서

static으로 객체를 1개를 생성한 후 private으로 생성자를 선언하여 외부에서 new 를 이용해 객체 생성하는 것을 막는다면 

싱글톤 패턴을 구현할 수 있다. 

 

 

이를 이용하면 고객의 요청마다 객체를 생성하는 것이 아니라, 이미 만들어진 객체를 공유해서 효과적으로 사용할 수 있다.  하지만 여러 문제점이 존재한다.

 

싱글톤을 구현하는 코드가 꽤 필요하고, 구체 클래스에 의존하여 DIP를 위반하고, 테스트가 어려우며 private 생성자로 인해 자식 클래스를 만들기 어렵다는 점 등 많은 문제점들이 있다. 

 

 

하지만 이 단점들은 spring이 전부 해결한다-!!

 

 

싱글톤 컨테이너

 

스프링 컨테이너는 앞서 언급한 싱글톤의 문제점을 해결하면서,

싱글톤 패턴을 따로 적용하지 않아도 객체 인스턴스를 싱글톤으로 관리한다. 

 

 

 

HOW? 

@Configuration을 통해 바이트코드를 조작하는 CGLIB 기술을 사용할 수 있다.  

이 기술은 AppConfig를 상속받는 클래스를 만들어서 그  클래스를 AppConfig로 등록한다. 

그 임의로 만든 클래스가 싱글톤이 보장되도록 만들어준다. 

 

 

주의점 

여러 클라이언트가 같은 인스턴스를 공유하여 사용하기 때문에 싱글톤 객체는 상태를 유지하게 설계하면 안된다.

즉 stateful하게 설계하면 안되고 (무상태) stateless로 설계해야 한다. 

 

 

 

 

 

 

 

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

반응형