기본 _ Ch. 5

yuKeon·2022년 11월 8일
0

Spring_Core

목록 보기
5/8
post-thumbnail

1. 싱글톤

  • 객체를 하나만 생성되는 것을 보장 → 메모리 낭비 방지
  • private 생성자를 사용해 new 방지
public class SingletonService {

    private static final SingletonService instance = new SingletonService(); //하나 생성

    public static SingletonService getInstance() { //여기서만 객체 호출
        return instance;
    }

    private SingletonService() { //생성자를 private으로 -> new로 객체 생성하는 것을 막음

    }

싱글톤 문제점

  • 구현에 들어가는 코드가 많음
  • 클라이언트가 구체 클래스에 의존 → DIP 위반
  • 테스트 및 내부 속성 변경, 초기화 어려움
    해결방안 → 싱글톤 컨테이너

싱글톤 컨테이너

  • 컨테이너는 객체를 하나만 생성하고 관리 → 싱글톤 보장
  • 싱글톤 단점 해결

2. 싱글톤 방식의 주의점

  • 싱글톤 객체는 무상태를 유지!!!

  • 특정 필드에 의존적인 필드, 특정 클라이언트가 값을 변경할 수 있는 필드가 있으면 안 됨!!

  • 스프링 컨테이너는 파라미터로 들어온 설정 클래스(AppConfig.class)를 통해 스프링 빈을 등록


3. @Configuration과 싱글톤

AppConfig 문제

  • AppConfig 코드는 MemoryMemberRepository를 두 번 호출한다 → 싱글톤X
@Bean //spring 컨테이너에 등록
    public MemberService memberService(){
        return new MemberServiceImpl(memberRepository()); //1번
    }

    @Bean
    public MemberRepository memberRepository() {
        return new MemoryMemberRepository();
    }
    @Bean
    public OrderService orderService(){
        return new OrderServiceImpl(new MemoryMemberRepository(), discountPolicy());
    } //2번
  • 이 문제를 @Configuration가 해결한다.
  • @Bean만 사용 → 스프링 빈으로 등록 But, 싱글톤 보장X

0개의 댓글