반응형
객체지향 5대원칙(SOILD)의 원칙중 O에 해당하는것으로 확장에는 열려있고, 수정에는 닫혀있어야 한다는 원칙이다.
이게 무슨말일까? 예를들어보자.
농어업에는 농민, 어민이 있다.
이를 코드화 하면 이렇다.
class Job:
def dowork(self, job):
if job == "농업":
print("농업을 한다.")
if job == "어업":
print("어업을 한다.")
if __name__ == "__main__":
job = Job()
job.dowork("농업")
job.dowork("어업")
여기서 만약 여기에 축산업이라는 다른 직업군을 추가한다면 어떻게 될까? 그럼 어쩔수 없이 Job클래스 자체를 수정해야 한다.
이는 개방폐쇄원칙에 위배될수밖에 없다. 이를 위배되지 않도록 변경하면 다음과 같다.
from abc import ABC,abstractmethod
class Job(ABC):
@abstractmethod
def dowork(self):
pass
class Work(Job):
def __init__(self):
__job = None
def setjob(self, job):
self.__job = job
def dowork(self):
print(self.__job+"을 한다.")
if __name__ == "__main__":
work = Work()
work.setjob("농업")
work.dowork()
work.setjob("어업")
work.dowork()
work.setjob("축산업")
work.dowork()
이렇게 추상화 클래스를 통해서 작성하면 자유롭게 직업군을 추가할수 있다.
이렇게 확장에 열려있고 확장시 기존 클래스 Work를 수정할일이 없어지게 되는것이다.
반응형
'객체지향 설계5대 원칙 > PYTHON' 카테고리의 다른 글
객체지향5대원칙-DIP(DIP-Dependency Inversion Principle) - 의존 역전 원칙 (0) | 2023.05.25 |
---|---|
객체지향5대원칙-LSP(Liskov Substitution Principle) - 리스코프 치환 원칙 (0) | 2023.05.25 |
객체지향5대원칙-ISP(Interface Segregation Principle) - 인터페이스 분리 원칙 (0) | 2023.05.24 |
객체지향5대원칙-SRP(Single Responsibility Principle) - 단일 책임 원칙 (0) | 2023.05.24 |