1. IoC

2. Bean 구별

3. IoC Container를 사용하는 이유?

1. IoC

1-1) IoC 개념

Inversion of Control, 의존 관계 주입(Dependency Injection)이라고도 하며

어떤 객체가 사용하는 의존 객체를 직접 만들어 사용하는 게 아니라

주입 받아 사용하는 방법을 말함.

1-2) Spring IoC Container

BeanFactory

애플리케이션 컴포넌트의 중앙 저장소

빈 설정 소스로부터 빈 정의를 읽어들이고, 빈을 구성하고 제공함.

1-3) Bean

Spring IoC Container가 관리하는 객체

1-3)-1. Bean의 장점

1-4) Application Context

BeanFactory

메시지 소스 처리 기능(i18n)

이벤트 발행기능

리소스 로딩 기능

...

2. Bean 구별

2-1) Class Book의 경우

→ Bean이 아님. → Getter와 Setter가 있기 때문에 → 'Java Bean'이라고는는 부를 수는 있음

Untitled

2-2) Class BookRepository

→ Bean임. @Repository라는 에노테이션을 붙였기 때문에 → Auto Scan을 통해 Bean으로 등록됨. → 의존성 주입을 하고 싶으면 Bean이 되어야 함.

Untitled

2-3) Class BookService

→ Bean임. 의존성 주입을 하고 싶으면 Bean이 되어야 함. → BookService를 여러 개 만들어서 사용할 필요가 없음. → 싱글톤(Click)으로 객체를 만들어 관리하고 싶을 때 Spring IoC를 만들어서 관리함. → 기본적으로 싱글톤 Scope로 Bean 등록됨.

Untitled

2-3)-1. 의존 객체를 직접 만들어서 사용하는 경우

Untitled

→ 의존 객체를 직접 만들어서 사용하지 않는 게 좋음.

2-3)-2. IoC 의존 관계 주입을 한 경우

Untitled

→ 의존 관계 주입은 직접 생성하는 것이 아닌 어떤 장치(생성자)를 사용해 주입을 받아서 사용함.

2-4) enum BookStatus

Untitled

3. IoC Container를 사용하는 이유?

여러 개발자들이 커뮤니티에서 논의하여 만들어낸 다양한 Dependency Injection 방법과

Best Practice, Know-How가 쌓여있는 프레임워크이기 때문임.

IoC 기능을 제공하는 빈을 담고 있기 때문에 컨테이너라고 불리며

빈(Bean, 컨테이너 내부에 들어있는 객체)과 컨테이너에 대한 설계를 할 때

아주 많은 개발자들의 의견을 바탕으로 만들어졌음.

초기에는 Xml이 대세였지만 개발자들의 의견을 수렴해 구글 주스(Google Gucie)가

처음 선보인 어노테이션기반의 Dependency Injection을 지원하기 시작했음.

현재는 @Service, @Repository, @AutoWired와 같은 어노테이션을 사용해

객체를 빈으로 등록할 수도 있고, 빈에 등록이 되어있는 객체를 손쉽게 주입받아 사용할 수 있음.