DI

Dependency Injection이란 의존 관계를 주입시키는 것

강한 결합

객체 내부에서 다른 객체를 생성할 경우 강하게 결합

A 클래스 내부에서 B 라는 객체를 직접 생성하고 있다면,

B 객체를 C 객체로 바꾸고 싶은 경우에 A 클래스도 수정해야 하는 방식이기 때문에 강한 결합이다.

느슨한 결합

객체를 주입 받는다는 것

외부에서 생성된 객체를 인터페이스를 통해서 넘겨받는 것

이렇게 하면 결합도를 낮출 수 있고 런타임시에 의존 관계가 결정되기 때문에 유연한 구조를 가진다.

Tip

SOLID 원칙에서 O 에 해당하는 Open Closed Principle

지키기 위해서 디자인 패턴 중 전략 패턴을 사용하게 되는데 생성자 주입을 사용하게 되면 전략 패턴을 사용

예시

다음과 같이 DI가 적용되지 않은 클래스가 있다

public class TextEditor {
    private final SpellChecker checker;

    public TextEditor() {
        this.checker = new SpellChecker();
    }
}

이런 방식을 사용하면 TextEditor와 SpellChecker는 **매우 강하게 결합**된다

다음과 같이 바꿔야 한다