개발 무지렁이

[Spring Boot] IoC 컨테이너와 DI, @Configuration + @Bean 본문

Backend/스프링부트

[Spring Boot] IoC 컨테이너와 DI, @Configuration + @Bean

Gaejirang-e 2022. 12. 5. 21:10

IoC 컨테이너(Inversion of Control Container)


Spring Framework로 객체를 생성하고,
의존성까지 관리하는 컨테이너를 말한다.
⭐. 객체의 생명주기를 관리
❓ 의존성 주입 (Dependency Injection)
:외부에서 생성된 객체를 주입받는 것을 의존성 주입이라 한다.
 (객체 내부에서 다른 객체를 생성하는 것은 강한 결합을 만드는 구조이다.)
:IoC 원칙하에 객체간 결합도를 낮추고, 유지보수가 좋은 코드를 만들어준다.

1. 생성자 주입 ** (생성자에 @Autowired를 붙여 객체를 주입)
    - 간결한 코드 작성 가능 
        - final 변수의 생성자를 대신 만들어주는 @RequiredArgsConstructor
        - 생성자가 하나일때 @Autowired를 생략 가능
2. 필드 주입 (필드 선언부에 @Autowired를 붙여 객체를 주입)
3. Setter 주입 (Setter 메서드에 @Autowired를 붙여 객체를 주입)

강한결합과 약한결합

public class ElectronicToy {
    private Battery battery;

    public ElectronicToy() {
        battery = new NormalBattery(); // 배터리가 떨어지면 장난감을 바꿔야한다. => 강한결합
    }
}
public class ElectronicToy {
    private Battery battery;

    public ElectronicToy(Battery battery) {
        this.battery = battery;
    }

    public void setBattery(Battery battery) {
        this.battery = battery; // 배터리가 떨어지면 배터리만 교체하면 된다. => 약한 결합
    }
}

Bean


IoC 컨테이너 내부에서 관리하는 객체를 말한다.

@Configuration

:자바클래스를 설정파일로 만들어주는 어노테이션
:Bean을 등록하기 위한 어노테이션

@Bean

:Bean(IoC가 관리하는 객체)을 생성하는 어노테이션

즉, @Configuration을 붙인 설정 파일 내에서 @Bean을 붙여 IoC 컨테이너 내부에 
객체를 생성함으로 인해 '객체의 생명주기'를 Spring Framework가 알아서 관리하고
'의존성 주입'까지 관리해준다.
Comments