의존 역전 원칙(DIP-Dependency Inversion Principle)

uglyduck.dev·2020년 9월 27일
0

개념 모아 🗂

목록 보기
30/40

정의

  • 의존 관계를 맺을 때 변화하기 쉬운 것 또는 자주 변화하는 것보다는 변화하기 어려운 것, 거의 변화가 없는 것에 의존하라는 원칙

변하기 쉬운 것과 어려운 것

변하기 어려운 것

  • 정책, 전략과 같은 큰 흐름, 개념 같은 추상적인 것

변하기 쉬운 것

  • 구체적인 방식, 사물 등과 같은 것

ex) 아이가 장난감을 가지고 노는 경우
아이가 장난감을 가지고 노는 경우

변하기 쉬운 것

  • 구체적인 장난감

변하기 어려운 것

  • 장난감을 가지고 노는 사실

변하기 어려운 추상적인 것들을 표현하는 수단

  • 인터페이스 = 변하지 않는 것
  • 추상 클래스 = 변하기 쉬운 것
    -> 인터페이스나 추상 클래스와 의존 관계를 맺도록 설계해야 함

의존성 주입(Dependency Injection)

  • 클래스 외부에서 의존되는 것을 대상 객체의 인스턴스 변수에 주입하는 기술
public class Kids{
    private Toy toy;
    
    public void setToy(Toy toy){
        this.toy = toy;
    }
    
    public void play() {
        System.out.println(toy.toString());
    }
}
  • Kid클래스에서 setToy 메서드로 아이가 가지고 노는 장난감을 바꿀 수 있음

로봇 장난감을 가지고 놀고 싶은 경우

public class Robot extends Toy{
    public String toString(){
        return "Robot";
    }
}
public class Main{
    public static void main(String[] args) {
        Toy t = new Robot();
        Kid k = new Kid();
        k.setToy(t);
        k.play();
    }
}

레고를 가지고 놀고 싶은 경우

public class Lego extends Toy{
    public String toString(){
        return "Lego";
    }
}
public class Main{
    public static void main(String[] args) {
        Toy t = new Lego();
        Kid k = new Kid();
        k.setToy(t);
        k.play();
    }
}
  • Kid, Toy, Robot 등 기존의 코드에 전혀 영향을 받지 않고도 장난감을 바꿀 수 있음

Reference

  • 정인상, 채흥석, 『JAVA 객체 지향 디자인 패턴』, 한빛미디어(2019.3.8), 121~123p
profile
시행착오, 문제해결 그 어디 즈음에.

0개의 댓글