Skip to content

아이템 5. 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 #18

Answered by JoisFe
Irisation23 asked this question in 3. 과제
Discussion options

You must be logged in to vote

해당 정리에서 의존 객체 주입을 보면 OOP 5원칙 중 OCP, DIP가 떠올랐습니다.

  • OCP : "소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀있다"

    처음 이 원칙이 말이 안된다고 생각했었습니다.
public class A {
    private C c = new C();
}


// 변경

public class A {
    private D d = new D();
}

확장을 하려면 코드를 변경해야하는게 아닌가? 했지만 다형성을 이용하여 의존 주입을 이용하면 가능할 수 있다는 것을 알게 되었습니다.

public Class A {
    private I i;

    public A(I i) {
        this.i = i;
    }
}

위 처럼 생성자를 통해 의존 주입을 할 수 있다면 클라이언트 코드에서 만 주입할 코드만 변경해준다면 서버 코드를 수정할 필요가 없게 됩니다. (클래스 A를 서버 코드 라고 하면)

따라서 서버 코드에서는 OCP를 지킬 수 있게 됩니다.
또한 이렇게 변경하는 코드를 주입하게 해주는 것이 다형성이고 이러한 특성을 잘 설명한 것이 DIP인 것 같습니다.

  • DIP : "프로그래머는 추상화에 의존해야하고 구체화에 의존해선 안된다."

하지만 클라이언트 코드 입장에서 변경은??

public class client {
    private A a = new A(new B());

  

Replies: 2 comments

Comment options

You must be logged in to vote
0 replies
Comment options

You must be logged in to vote
0 replies
Answer selected by Irisation23
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
2장 객체 생성과 파괴 이펙티브 자바 2장 (객체 생성과 파괴)
3 participants