싱글톤

=·2021년 7월 30일
0

BeanFactory : 스프링 컨테이너의 최상위 인터페이스. GetBean()등의 기능들을 제공. 이 자체로 스프링 컨테이너라고도 함.

ApplicationContext: BeanFactory뿐만 아니라 MessageSource, EnviromentCapable 인터페이스 등 또한 상속받아 다양한 기능을 제공하는 스프링 컨테이너이다.

싱글톤 패턴

객체 호출 시 마다 객체가 새로 생성되어 메모리를 낭비하는 것을 막기 위해 고안된 디자인 패턴.
클래스마다 인스턴스가 딱 1개만 생성되도록 보장한다.
간단한 구현 방법:
1. 싱글톤으로 만들 클래스의 객체 하나를 static으로 미리 생성해놓는다.
2. 외부에서 이 클래스의 객체를 new로 새로 생성하는것을 막기위해 이 클래스의 생성자를 private으로 한다.
3. 1에서 미리 생성해놓은 객체를 리턴하는 public 메소드(getInstance() 등)를 만들어 외부에서 미리 만든 객체만을 사용하도록 한다.

싱글톤 패턴의 단점

위와 같은 방법은 클라이언트가 구체 클래스에 의존하게 되므로 DIP 를 어긴다. 이 외에도 싱글톤 패턴이 가진 단점은 여러가지 있다.

  • 싱글톤 패턴을 구현하는 코드 자체가 많이 들어간다.
  • 의존관계상 클라이언트가 구체 클래스에 의존한다. DIP를 위반한다.
  • 클라이언트가 구체 클래스에 의존해서 OCP 원칙을 위반할 가능성이 높다.
  • 테스트하기 어렵다.
  • 내부 속성을 변경하거나 초기화 하기 어렵다.
  • private 생성자로 자식 클래스를 만들기 어렵다.
  • 결론적으로 유연성이 떨어진다.

싱글톤 컨테이너

앞서 말한 싱글톤 패턴의 단점들은 스프링에서 제공하는 스프링 컨테이너를 가지고 개발하면 전부 해결이 된다.
스프링은 구체클래스를 스프링 컨테이너(ex.ApplicationContext )에 bean으로 등록해서 해당 구체클래스의 인스턴스를 조회할때마다 같은 객체를 반환해준다.

0개의 댓글