반응형
의존 역전 원칙(DIP-Dependency Inversion Principle)
객체지향 5대원칙(SOILD)의 원칙중 D에 해당하는것으로 의존관계생성시
자주 변환하는것이 아닌 자주 변화하지 않는것에 의존성을 더 올려서
유지보수 능력을 올리기 위한 원칙이다.
그럼 예를들어보자
농부가 과수원에서 과일을 재배하는데 아래와 같다고 하자
package kr.co.touch;
public class Apple {
public void Culture(){
System.out.println("사과를 재배합니다.");
}
}
package kr.co.touch;
public class Orange{
public void Culture(){
System.out.println("오렌지를 재배한다.");
}
}
package kr.co.touch;
public class Farmer extends Apple{
@Override
public void Culture() {
super.Culture();
}
}
package kr.co.touch;
public class Main {
public static void main(String args[]){
Farmer farmer = new Farmer();
farmer.Culture();
}
}
이런경우 농부가 재배하는 작물을 Orange로 바꾼다면 아래와 같이 수정해야 합니다.
package kr.co.touch;
public class Farmer extends Orange{
@Override
public void Culture() {
super.Culture();
}
}
이렇게 Farmer가 뭘 재배하냐는 작물을 계속 상속 의존하게 되면 새로운 작물로 변경할때마다 지속적으로 Farmer클래스가 변경되야 합니다. 그래서
Farmer는 재배만 하고 뭘 재배할지는 외부에서 정의해서 준다면 이렇게 변경할수 있습니다.
package kr.co.touch;
public abstract class Fruit{
public abstract void Culture();
}
package kr.co.touch;
public class Farmer{
private Fruit fruit;
public void Culture(Fruit fruit) {
fruit.Culture();
}
}
package kr.co.touch;
public class Apple extends Fruit {
public void Culture(){
System.out.println("사과를 재배합니다.");
}
}
package kr.co.touch;
public class Orange extends Fruit{
public void Culture(){
System.out.println("오렌지를 재배한다.");
}
}
package kr.co.touch;
public class Main {
public static void main(String args[]){
Fruit fruit = new Apple();
Farmer farmer = new Farmer();
farmer.Culture(fruit);
}
}
여기서 Apple재배에서 Orange로 변경하게 되면 다음과 같이만 해주면 됩니다.
package kr.co.touch;
public class Main {
public static void main(String args[]){
Fruit fruit = new Orange();
Farmer farmer = new Farmer();
farmer.Culture(fruit);
}
}
반응형
'객체지향 설계5대 원칙 > JAVA' 카테고리의 다른 글
객체지향5대원칙-LSP(Liskov Substitution Principle) - 리스코프 치환 원칙 (0) | 2023.05.23 |
---|---|
객체지향5대원칙-ISP(Interface Segregation Principle) - 인터페이스 분리 원칙 (0) | 2023.05.22 |
객체지향5대원칙-OCP(Open Closed Principle) - 개방 폐쇄 원칙 (0) | 2023.05.22 |
객체지향5대원칙-SRP(Single Responsibility Principle) - 단일 책임 원칙 (0) | 2023.05.22 |