IoC (Inversion of Control)란 ?
IoC란 제어의 역전이라 부른다
제어의 역전이란 메서드나 객체의 호출 작업을 개발자가 아닌 외부에서 결정되는 것을 의미한다.
객체의 의존성을 역전시켜 객체 간의 결합도를 줄이고 유연한 코드를 작성할 수 있게하여
가독성 및 코드 유지 보수를 편하게 할 수 있게 한다.
DI (Dependency Injection)란 ?
DI란 의존성 주입이라 부르며 객체를 직접 생성하는게 아닌 외부(IoC 컨테이너)에서
생성한 후 주입시켜주는 방식이다.
DI를 사용한다면 의존성이 줄어들고 가독성이 높아지며 코드의 재사용성이 높아진다는
장점이 있습니다.
의존성 주입 방식으로는 3가지가 있다.
- 생성자 주입
- Set 메서드를 이용한 주입
- 필드 주입
이 3가지 중에서 스프링에서 권장하는 의존성 주입 방식은 생성자 주입이다.
생성자 주입
생성자를 통해 의존관계를 주입한느 방법으로 생성자를 호출 시에 딱 한번만 호출 되는 것을 보장한다.
public class Consumer {
private final Food food;
public Consumer(Food food) {
this.food = food;
}
}
Set 메서드를 이용한 주입
말 그대로 Setter 메서드를 이용하여 의존관계를 주입하는 방식이다.
public class Consumer {
private Food food;
public void setFood(Food food) {
this.food = food;
}
}
필드 주입
필드에 직접 의존관계를 주입하는 방법이다.
코드가 짧아지는 장점이 있지만 외부에서 변경이 불가능하고 테스트 코드를 작성하기 힘들다는 단점이 있다.
public class Consumer {
private Food food;
}
위의 3가지 방법중에 스프링에서 생성자 주입을 권장하는 이유는 아래와 같다.
- 의존관계 설정이 되지 않으면 컴파일 타임에 알 수 있다.
- 의존성 주입이 필요한 필드를 final 키워드로 선언 가능하다.
- 스프링에서 순환 참조 감지 기능을 제공하며 순환 참조 시 에러를 보여준다.
- 테스트 코드 작성이 용이하다.
'TIL' 카테고리의 다른 글
JPA - 일정 CRUD (1) | 2024.10.13 |
---|---|
JPA (1) | 2024.10.10 |
ResponseEntity (0) | 2024.10.04 |
Spring - 일정관리 앱 만들기 (0) | 2024.10.04 |
Spring MVC 구조 이해하기 (1) | 2024.10.01 |