Notice
Recent Posts
Recent Comments
Link
개발 무지렁이
[Spring Boot] IoC 컨테이너와 DI, @Configuration + @Bean 본문
IoC 컨테이너(Inversion of Control Container)
의존성까지 관리하는 컨테이너를 말한다.
⭐. 객체의 생명주기를 관리
❓ 의존성 주입 (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
@Configuration
:자바클래스를 설정파일로 만들어주는 어노테이션
:Bean을 등록하기 위한 어노테이션
@Bean
:Bean(IoC가 관리하는 객체)을 생성하는 어노테이션
즉, @Configuration을 붙인 설정 파일 내에서 @Bean을 붙여 IoC 컨테이너 내부에
객체를 생성함으로 인해 '객체의 생명주기'를 Spring Framework가 알아서 관리하고
'의존성 주입'까지 관리해준다.
'Backend > 스프링부트' 카테고리의 다른 글
[Spring Boot] MockMvc를 이용한 테스트 (0) | 2022.12.07 |
---|---|
[Spring Boot] BaseEntity에 사용되는 @SuperBuilder와 @MappedSuperclass (0) | 2022.12.06 |
[Spring Boot] QueryDSL, Q클래스 (0) | 2022.12.04 |
[Spring Boot] 폼과 폼 Validation (0) | 2022.11.28 |
[Spring Boot] 서비스(Service)와 에러처리 (0) | 2022.11.27 |
Comments