Spring & Boot
IoC, DI
린예라
2023. 9. 1. 23:17
IoC(Inversion of Control) 제어권 역전
DI(Dependency Injection) 의존성주입
제어권 역전, 즉 IoC는 하나의 설계 원칙이고, 의존성 주입은 디자인 패턴의 하나라고 할 수 있다. 제어권 역전의 원칙을 지키기 위하여 의존성 주입을 사용한다고 보면 된다.
그렇다면 의존성이란?
어떤 사람이 다리를 다쳐서 걷기 위해 휠체어나 목발을 사용한다면, 그 사람은 걷는것에 대하여 휠체어나 목발에 의존한다고 할 수 있다.
강하게 결합되어 있는 소비자와 햄버거
public Class Consumer{
void eat() {
Consumer consumer = new Consumer();
hamburger.eat();
}
public static void main(String[] args){
Consumer consumer = new Consumer();
consumer.eat();
}
}
class Hamburger{
public void eat(){
System.out.println("햄버거를 먹는다.");
}
}
여기서 만약 소비자가 햄버거가 아니라 다른 피자를 먹는다고 수정하거나 추가하면 eat 메소드를 수정해야 한다. 이런 경우를 강하게 결합되어 있다고 볼 수 있다.
그렇다면 약하게 연결하기 위해서는 어떻게 해야할까? 바로 인터페이스를 활용하면 된다.
약하게 결합되어 있는 소비자와 햄버거
public class Consumer{
void eat(Food food){
food.eat();
}
public static void main(String[] args){
Consumer consume = new Consumer();
consumer.eat(new Hamburger());
consumer.ear(new Pizza());
}
}
interface Food{
void eat();
}
class Hamburger implements Food{
@Override
public void eat(){
System.out.println("햄버거를 먹는다.");
}
}
class Pizza implements Food{
@Override
public void eat(){
System.out.println("피자를 먹는다.");
}
}
위와 같은경우 음식을 수정하거나 추가해도 해당 음식만 수정하면 되고 그에 관련된 eat메소드는 수정이 필요가 없어진다.
eat 메소드를 호출할 때 외부에서 Hamburger에 해당하는 객체를 만들어서 집어 넣었다(의존성 주입).
의존성 주입에는 크게 3가지가 있다. 필드주입, 메소드주입, 생성자 주입.
보통 생성자주입을 가장 많이 쓴다
의존성 주입 3가지에 대한 상세설명 포스팅 : https://linyerawork.tistory.com/41