com.example.week4 패키지에 SingletonTest.java를 클래스로 만듭니다.
같은 memberService를 사용하지만 뒤에 붙은 주소값이 다른걸 볼 수 있다.
수 많은 객체를 생성하게 되면 위에 방식은 메모리 낭비와 효율성이 떨어지게 된다.
com.example.week4에 singleton 패키지를 생성한다.
singleton 패키지에서 SingletonService.java 파일을 생성하고, 아래 코드를 작성한다.
static 영역에 객체 인스턴스를 미리 1개 생성한다.
객체 인스턴스가 필요한 경우 getInstance() 메서드를 통해서만 조회할 수 있도록 한다.
이 메서드를 호출하면 항상 같은 static instance를 호출하게 된다.
외부에서 생성자를 new로 새로 생성되는 것을 방지하기 위해 private 생성자로 생성한다.
com.example.week4에 SingletonTest.java 파일을 수정합니다.
스프링 컨테이너의 기본값은 싱글톤이다.
위 코드처럼 직접 static 인스턴스를 직접 만들지 않아도 됩니다.
싱글톤 패턴을 구현하는 코드 자체가 많다.
의존관계상 클라이언트가 구체 클래스에 의존한다.
지정해서 가져오기 때문에 테스트하기 어렵다.
private 생성자를 사용하여 자식 클래스를 만들기 어렵기 때문에 유연성이 떨어진다.
속성 공유
Application 초기 구동 시 인스턴스 생성
객체 인스턴스를 싱글톤으로 관리한다.
스프링 컨테이너는 싱글톤 컨테이너 역할을 한다.
싱글톤 객체로 생성하고 관리하는 기능을 싱글톤 레지스트리라 한다.
스프링 컨테이너의 위 기능 덕분에 싱글턴 패턴의 모든 단점을 해결하며 객체를 싱글톤으로 유지할 수 있다.
dependencyConfig.java 파일을 수정합니다.
@Configuration 과 @Bean 애너테이션을 추가해줍니다.
@Bean을 통해 스프링 컨테이너에 등록됩니다.
com.example.week4에 SingletonTest.java 파일을 수정한다.