[스프링 핵심 원리]-4

EarlyBird·2021년 10월 31일
0

스프링 핵심 원리

목록 보기
4/6
post-thumbnail

김영한님의 스프링 핵심 원리 강의 학습 내용입니다.

  • 순수한 DI 컨테이너(AppConfig)는 요청을 할 때 마다 객체를 새로 생성한다. -> 메모리 낭비가 심하다.

싱글톤 패턴

  • 클래스의 인스턴스가 단 1개만 생성
public class SingletonService {

    private static final SingletonService instance = new SingletonService();

    public static SingletonService getInstance(){
        return instance;
    }

    private SingletonService(){

    }
}
  • getInstance() : 항상 같은 인스턴스 반환
    void singletonServiceTest(){
        SingletonService singletonService1 = SingletonService.getInstance();
        SingletonService 
        //...

        System.out.println("singletonService1 = " + singletonService1);
        //...
        Assertions.assertThat(singletonService1).isSameAs(singletonService2);
    }
  • isEqualTo : 값 비교
  • isSameAs : 객체 비교

단점

  • 구현 코드가 많다.
  • DIP, OCP 위반 : 구체.getInstance()
  • 테스트가 어렵다.
  • 유연성이 떨어진다.
  • 안티 패턴

싱글톤 컨테이너

    void springContainer(){

        ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
        MemberService memberService1 = ac.getBean("memberService", MemberService.class);
        //...

        Assertions.assertThat(memberService1).isSameAs(memberService2);
    }
  • 싱글톤 패턴 적용 없이 객체를 싱글톤으로 관리
  • 싱글톤 패턴 단점 보완
  • 다수의 요청이 올 때 이미 만들어진 객체를 공유하여 효율적인 재사용

싱글톤 방식 주의점

  • 상태를 유지한는 식으로 설계하면 안된다.
  • 무상태로 설계해야 한다.
  • 스프링 빈의 필드에 공유 값을 설정하면 안된다.
  • @Configuration 사용해야 싱글톤을 보장
profile
안되면 되게 합시다

0개의 댓글

관련 채용 정보