반응형
객체지향 5대원칙(SOILD)의 원칙중 D에 해당하는것으로 의존관계생성시
자주 변환하는것이 아닌 자주 변화하지 않는것에 의존성을 더 올려서
유지보수 능력을 올리기 위한 원칙이다.
그럼 예를들어보자
농부가 과수원에서 과일을 재배하는데 아래와 같다고 하자
class Apple:
def Culture(self):
print("사과를 재배합니다.")
class Orange:
def Culture(self):
print("오렌지를 재배합니다.")
class Farmer(Apple):
def Culture(self):
super().Culture()
if __name__ == "__main__":
farmer = Farmer()
farmer.Culture()
이런경우 농부가 재배하는 작물을 Orange로 바꾼다면 아래와 같이 수정해야 합니다.
class Apple:
def Culture(self):
print("사과를 재배합니다.")
class Orange:
def Culture(self):
print("오렌지를 재배합니다.")
class Farmer(Orange):
def Culture(self):
super().Culture()
if __name__ == "__main__":
farmer = Farmer()
farmer.Culture()
이렇게 Farmer가 뭘 재배하냐는 작물을 계속 상속 의존하게 되면 새로운 작물로 변경할때마다 지속적으로 Farmer클래스가 변경되야 합니다. 그래서
Farmer는 재배만 하고 뭘 재배할지는 외부에서 정의해서 준다면 이렇게 변경할수 있습니다.
from abc import ABC,abstractmethod
class Fruit(ABC):
@abstractmethod
def Culture(self):
pass
class Apple(Fruit):
def Culture(self):
print("사과를 재배합니다.")
class Orange(Fruit):
def Culture(self):
print("오렌지를 재배합니다.")
class Farmer:
def __init__(self, fruit: Fruit):
self._fruit: Fruit = fruit
def Culture(self):
self._fruit.Culture()
if __name__ == "__main__":
fruit: Fruit = Apple()
farmer = Farmer(fruit)
farmer.Culture()
여기서 Apple재배에서 Orange로 변경하게 되면 다음과 같이만 해주면 된다.
package kr.co.touch;
if __name__ == "__main__":
fruit: Fruit = Orange()
farmer = Farmer(fruit)
farmer.Culture()
반응형
'객체지향 설계5대 원칙 > PYTHON' 카테고리의 다른 글
객체지향5대원칙-LSP(Liskov Substitution Principle) - 리스코프 치환 원칙 (0) | 2023.05.25 |
---|---|
객체지향5대원칙-ISP(Interface Segregation Principle) - 인터페이스 분리 원칙 (0) | 2023.05.24 |
객체지향5대원칙-OCP(Open Closed Principle) - 개방 폐쇄 원칙 (0) | 2023.05.24 |
객체지향5대원칙-SRP(Single Responsibility Principle) - 단일 책임 원칙 (0) | 2023.05.24 |