우아한테크코스 테코톡
주디의 Spring Bean
카테고리 : 우아한테크코스 테코톡
주디의 Spring Bean
Spring Bean
- 스프링 IOC 컨테이너가 관리하는 객체이다
- Spring IOC 컨테이너
- 빈을 관리하는 객체
빈과 의존성 주입
- 객체를 빈으로 등록하지 않고 의존성 주입을 도입한다면 어디에선가 new 키워드를 사용하여 객체를 생서해야한다
- 구현체가 바뀐다면 객체를 생성한 곳에서도 변경이 일어난다
- 여러개의 구현체가 존재한다면 해당 의존성 주입 순서를 알아야한다
- 애플리케이션의 규모가 커진다면 의존성을 기억하고 관리해야한다 - 인간의 한계가 있다
- 그래서 의존성 주입이 필요한 객체를 빈으로 등록하여 스프링 IoC 컨테이너가 객체의 생성과 의존성 주입을 관리하도록 해야한다
빈과 싱글턴
- Spring이 아닌 객체를 싱글턴으로 만들었을 때
- 싱글턴 패턴에는 단점이 있다
- 다형성을 이용하지 못한다
- 싱글턴 패턴을 사용하면 생성자의 접근 지정자를 private으로 설정해야한다 하지만 이렇게 구현하면 상속이 불가능하다
- 단위테스트가 어렵다
- 객체를 싱글턴 패턴으로 구현할 경우 해당 객체는 공유 객체가 되므로 단위테스트를 실행할 때 테스트 순서에 따라 결과가 달라진다
- 다형성을 이용하지 못한다
- 싱글턴 패턴에는 단점이 있다
스프링 IoC컨테이너는 빈을 어떻게 관리할까?
- 객체 생성 + property 설정 -> 의존 설정 -> 초기화 -> 사용 -> 소멸
빈 설정시 주의점
- 빈 스코프를 싱글톤으로 설정할 경우 상태를 가지면 안된다
- 빈 스코프를 프로토타입으로 설정한다면 요청이 올 때마다 객체가 생성이 된다
- 의존성을 자동 주입 해야 할 인터페이스 구현체가 두 개 이상이라면 스프링은 어떤 구현체를 자동 주입할지 정하지 못해서 충돌이 일어나게 된다
- @Primary 어노테이션을 붙이면 스프링이 우선순위를 파악하고 의존성 주입시 해당 구현체를 사용하게 된다
- @Qualifier 어노테이션을 사용하여 특정 구현체를 주입하도록 설정할 수 있다