우아한테크코스 테코톡

주디의 Spring Bean

https://youtu.be/3gURJvJw_T4

주디의 Spring Bean

Spring Bean

  • 스프링 IOC 컨테이너가 관리하는 객체이다
  • Spring IOC 컨테이너
    • 빈을 관리하는 객체

빈과 의존성 주입

  • 객체를 빈으로 등록하지 않고 의존성 주입을 도입한다면 어디에선가 new 키워드를 사용하여 객체를 생서해야한다
    • 구현체가 바뀐다면 객체를 생성한 곳에서도 변경이 일어난다
    • 여러개의 구현체가 존재한다면 해당 의존성 주입 순서를 알아야한다
    • 애플리케이션의 규모가 커진다면 의존성을 기억하고 관리해야한다 - 인간의 한계가 있다
    • 그래서 의존성 주입이 필요한 객체를 빈으로 등록하여 스프링 IoC 컨테이너가 객체의 생성과 의존성 주입을 관리하도록 해야한다

빈과 싱글턴

  • Spring이 아닌 객체를 싱글턴으로 만들었을 때
    • 싱글턴 패턴에는 단점이 있다
      • 다형성을 이용하지 못한다
        • 싱글턴 패턴을 사용하면 생성자의 접근 지정자를 private으로 설정해야한다 하지만 이렇게 구현하면 상속이 불가능하다
      • 단위테스트가 어렵다
        • 객체를 싱글턴 패턴으로 구현할 경우 해당 객체는 공유 객체가 되므로 단위테스트를 실행할 때 테스트 순서에 따라 결과가 달라진다

스프링 IoC컨테이너는 빈을 어떻게 관리할까?

  • 객체 생성 + property 설정 -> 의존 설정 -> 초기화 -> 사용 -> 소멸

빈 설정시 주의점

  • 빈 스코프를 싱글톤으로 설정할 경우 상태를 가지면 안된다
    • 빈 스코프를 프로토타입으로 설정한다면 요청이 올 때마다 객체가 생성이 된다
  • 의존성을 자동 주입 해야 할 인터페이스 구현체가 두 개 이상이라면 스프링은 어떤 구현체를 자동 주입할지 정하지 못해서 충돌이 일어나게 된다
    • @Primary 어노테이션을 붙이면 스프링이 우선순위를 파악하고 의존성 주입시 해당 구현체를 사용하게 된다
    • @Qualifier 어노테이션을 사용하여 특정 구현체를 주입하도록 설정할 수 있다

© 2020. All rights reserved.

SIKSIK