DI, IoC 개념

2023. 11. 1. 01:19백엔드/Spring Boot

DI (Dependency Injection) 

`의존성 주입` 혹은 `의존 관계 주입`이라는 의미로 객체 간의 의존성을 외부에서 주입하는 방식을 의미하며 객체가 직접 필요한 의존 객체를 생성하거나 찾는 대신 외부에서 주입받아 사용하는 디자인 패턴으로 DI를 통해 모듈간의 결합도가 낮아지고 유연성이 높아진다. 

 

* 의존 : 한 클래스가 다른 클래스의 메서드를 실행하는 것 

 

IoC (Inversion of Control)

`제어의 역전`이라고 불리며 메소드나 객체의 호출작업 및 의존성 관리를 외부에서 결정하도록 하여 프로그램의 제어 흐름을 역전시키는 디자인 패턴으로 객체간의 결합도를 줄이고 유연한 코드를 작성 할 수 있어 유지 보수에 용이

 

 

의존성 주입방법 3가지 

- Setter 주입

// setter 메소드에 @Autowired 을 붙여 의존성 주입
@Component
public class MyComponent {
    private MyDependency myDependency;

    @Autowired
    public void setMyDependency(MyDependency myDependency) {
        this.myDependency = myDependency;
    }

    public void performAction() {
        System.out.println("MyComponent: Performing action.");
        myDependency.doSomething();
    }
}

 

- 생성자 주입 

// 의존성을 설정하는 setter 메서드를 통해 주입
@Component
public class MyComponent {
    private final MyDependency myDependency;

    @Autowired
    public MyComponent(MyDependency myDependency) {
        this.myDependency = myDependency;
    }

    public void performAction() {
        System.out.println("MyComponent: Performing action.");
        myDependency.doSomething();
    }
}

 

- 필드 주입

// 필드에 @Autowired를 붙여 직접 의존성 주입
@Component
public class MyComponent {
    @Autowired
    private MyDependency myDependency;

    public void performAction() {
        System.out.println("MyComponent: Performing action.");
        myDependency.doSomething();
    }
}