![movie](https://img.youtube.com/vi/3gURJvJw_T4/0.jpg)
[10분 테코톡] 주디의 Spring Bean
- Spring Bean이란? Spring IoC(Inversion of Control) Container에서 관리하는 객체
- Spring IoC Container란? Bean을 관리하는 객체로, Bean을 인스턴스화 하고, 구성과 조립을 담당
- 빈과 의존성 주입
- 의존성 주입 = new 키워드를 사용하여 객체를 생성하는 것
- 객체를 빈으로 등록하지 않고, 의존성을 직접 주입 하게 된다면, 의존 관계를 전부 파악해야하고, 이 과정에서 객체의 중복 생성이 발생하게 된다.
- 의존성 주입이 필요한 객체를 빈으로 등록하여 spring IoC container가 객체 생성과 의존성 주입을 관리하도록 해야 한다. => 주입된 의존성을 사용하기만 하면 됨
- 빈과 싱글턴
- 빈 = 싱글턴
- 싱글턴 패턴의 단점
- 다형성을 이용하지 못 한다. 싱글턴 패턴을 사용하면 생성자를 private 설정해야하기 때문에 상속이 불가능해진다.
- 단위 테스트가 어렵다. 객체를 싱글턴 패턴으로 구현할 경우 공유 객체가 되는데, 단위 테스트를 진행할 때 테스트의 순서에 따라 결과가 달라지게 된다.
직접 객체를 싱글턴으로 만들어 사용하게 되면,
- 스프링 IoC 컨테이너는 빈을 어떻게 관리할까?
- IoC 컨테이너가 빈의 라이프사이클을 관리하는 과정
객체 생성 + property 설정 -> 의존 설정 -> 초기화 -> 사용 -> 소멸
- 빈 설정시 주의점
- 빈 스코프를 싱글턴으로 설정한 경우 상태를 가지면 안된다.
- 빈 스코프를 프로토타입으로 설정하면 요청이 올때마다 객체가 생성. 모든 스레드에서 공유하는 것이 아니므로 상태를 가질 수 있다.
- 의존성을 자동 주입해야할 인터페이스 구현체가 두 개 이상이라면, 충돌이 발생한다. 어노테이션을 사용하여 의존성 주입의 우선순위를 지정할 수 있다.
- 의존성 자동 주입 인터페이스 구현체가 하나일 경우, @Primay 어노테이션 사용.
- 의존성 자동 주입 인터페이스 구현체가 두 개 이상일 경우, @Qualifier 어노테이션을 사용하면 상황에 맞게 구현체를 자동 주입이 가능
- Spring Bean이 필요한 이유: 스프링 loC컨테이너가
특정 객체의 라이프사이클을 관리한다는 것을 명시하기 위해
- Spring IoC Container가 Bean을 관리하는 이유: 의존성을 사용하는 로직에만 집중 가능. 의존성이 주입 될 객체가 항상 동일한 오브젝트임을 보장