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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
2장 객체 생성과 파괴 이펙티브 자바 2장 (객체 생성과 파괴)
3 participants