의존 역전 원칙이란 의존 관계를 맺을 때 변화하기 쉬운 것 보다 변화하기 어려운 것에 의존하라는 원칙을 의미한다.
DIP를 만족하는 설계는 변화에 유연한 시스템이 된다.
변하기 쉬운 것과 변하기 어려운 것은 어떻게 구분 할 수 있을까?
정책, 전략과 같은 어떤 큰 흐름이나 개념같은 추상적인 것은 변하기 어려운 것이고, 구체적인 방식, 사물 등과 같은 것은 변하기 쉬운 것으로 구분한다.
위 클래스 다이어그램을 보면 Weapon은 변하기 어려운 것이고, Sword, Axe, Spear는 변하기 쉬운 것이다.
인터페이스 = 변하지 않는 것
구체 클래스 = 변하기 쉬운 것
DIP를 만족하면 여러가지 타입의 클래스를 인터페이스를 통해 쉽게 저장이 가능하다.
public class Person {
private Weapon weapon;
public void setWeapon(Weapon weapon) {
this.weapon = weapon;
}
public void attack() {
weapon.attack();
}
}
setWeapon을 통해서 Weapon 인터페이스를 구현한 클래스를 외부에서 주입해 무기를 착용한다.
public interface Weapon {
public void attack();
}
public class Sword implements Weapon {
@Override
public void attack() {
System.out.println("검으로 휘두르다.");
}
}
public class Axe implements Weapon {
@Override
public void attack() {
System.out.println("도끼로 휘두르다");
}
}
public class Spear implements Weapon {
@Override
public void attack() {
System.out.println("창으로 찌르다");
}
}
public class Main {
public static void main(String[] args) {
Person person = new Person();
person.setWeapon(new Sword());
person.attack();
person.setWeapon(new Axe());
person.attack();
}
}
참조 : https://defacto-standard.tistory.com/113?category=703460
'IT > SOLID 원칙' 카테고리의 다른 글
인터페이스 분리 원칙 - ISP (Interface Segregation Principal) (0) | 2019.12.11 |
---|---|
단일 책임의 원칙 - SRP(Single Responsibility Principle) (0) | 2019.12.10 |
개방 폐쇄 원칙 - OCP(Open Close Principal) (0) | 2019.12.10 |