TIL

+ 16 springboot IoC Container 와 Bean

JAVABOZA 2023. 6. 29. 11:54
용어 정리

IoC : 제어의 역전
DI : 의존성 주입

Bean : spring이 관리하는 객체
IoC Container : Bean을 모아둔 컨테이너 

DI (의존성 주입)을 한다?

가장 먼저 해야할 일은 객체 생성!

 

의존성 주입이란?

디자인결합도를 느슨하게 되도록 하며, 의존관계 / 역전원칙 / 단일책임 원칙 을 따르도록

클라 단에서 생성에 의한 의존성을 클라이언트의 행위로부터 분리하는 것

ex)

public class Dog{
	private Animal animal;
    
    public Dog(){
    	this.animal = new Dog;
    }
}

의존성주입에 대한 예시

:: Dog객체는 Animal객체에 의존한다.

 

하지만 이렇게 되면 문제점이 생긴다.

- Animal을 수정하면 Dog도 수정이됨

- 부모객체를 바꾸면 자식 객체도 변경이 됨

 

 

 

 

IoC(Inversion of Control) 의미

 

:: 내부적으로 조작할 객체를 직접 생성하지 않고 외부로 부터 주입받는 기법을 의미미

:: 추가로 객체를 외부로 부터 주입해주는 작업을 DI(의존성 주입)이라 부른다.

:: 컴포넌트 의존관계 설정, 설정 및 생명 주기을 해결하기 위한 디자인패턴

 

Bean들의 의존관계를 연결해주는 역할

 

 

IoC Container(Spring Container) (=제어반전)의미

:: 스프링의 핵심 중 하나. Bean을 생성하고 의존성과 생명주기를 관리하는 컨테이너:: Bean으로 등록된 객체를

IoC Container로 부터 DI를 통해 가져와 사용할 수 있음

 

IoC Container Bean을 저장한다고 하여서, 또다른 말로는 BeanFactory라고 부른다.

 

BeanFactory는 하나의 인터페이스 이며 Application Context는 BeanFactory의 구현체를 상속 받고 있는 인터페이스!

다시 말해 IoC Container는 Application context의 구현체!

 

spring docs 발췌


 

 

Bean

:: 컨테이너가 관리하는 객체를 Bean이라 부른다.

:: 기본적으로 싱글턴 패턴이다.

:: 빈 끼리는 DI가 가능!!!

 

아래의 에노테이션을 사용하면 Auto Scan이라는 과정을 거쳐 자동으로 해당 클래스를 자동으로 Bean으로 등록해준다.

:: @Controller , @RestController

:: @Service

:: @Repository

:: @Componert

 

추가로 @Bean 이라는 에노테이션은 개발자가 직접 작성한 클래스가 아닌 외부 라이브러리의 객체를 Bean으로 만들고 싶을 때 사용.

 

@ComponentScan :: 해당 에노테이션이 걸린 packages위치와 그 하위 packages를 전부 체크해서 @Component가

                                    설정된 클래스들을 Bean 으로 등록

 

 

@Autowired --> 의존성 주입하기

크게 세가지 필드주입, 메서드(특히 Setter)주입, 생성자주입