반응형 객체지향 설계5대 원칙/PYTHON5 객체지향5대원칙-DIP(DIP-Dependency Inversion Principle) - 의존 역전 원칙 객체지향 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로 바꾼다면 .. 2023. 5. 25. 객체지향5대원칙-LSP(Liskov Substitution Principle) - 리스코프 치환 원칙 객체지향 5대원칙(SOILD)의 원칙중 L에 해당하는것으로 만약 S가 T의 기본 클래스라면 S의 객체를 T의 객체로 대체해도 프로그램은 정상적으로 동작해야 한다라는 원칙이다. 그럼 예를들어보자 형은 건축공이고 동생은 개발자가 있다고 하자 형과 동생은 모두 가족이지만 동생의 일을 형이 대신할수 없기때문에 대체할수 없는 리스코프 치환원칙에 위배된다. 이를 코드로 보면 다음과 같다. class BuildingEngineering: def do_work(self): print("집을 짓고 있다.") class Programmer(BuildingEngineering): def do_work(self): print("소프트웨어를 개발중입니다.") # Main 함수 대신에 직접 호출 if __name__ == "__.. 2023. 5. 25. 객체지향5대원칙-ISP(Interface Segregation Principle) - 인터페이스 분리 원칙 객체지향 5대원칙(SOILD)의 원칙중 I에 해당하는것으로 다중 메소드를 가진 인터페이스가 있다면 여러개의 메소드로 분할 하는것이 합리적이다라고 말하고 있다. 그럼 예를들어보자 hwp파일이 있는데 이를 text와 html형태로 출력코자 한다면 구현클래스는 아래와 같이 하면 된다. from abc import ABC,abstractmethod class ConvertHwp(ABC): def gethtml(self): pass def gettext(self): pass class Convert(ConvertHwp): def gethtml(self): print("html출력") def gettext(self): print("text출력") if __name__ == "__main__": convert = C.. 2023. 5. 24. 객체지향5대원칙-OCP(Open Closed Principle) - 개방 폐쇄 원칙 객체지향 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클래스 자체를 수정해야 한다. 이는 개방폐쇄원칙에 위배될수밖에 없다. 이를 위배되지 않도록 변경하면 .. 2023. 5. 24. 객체지향5대원칙-SRP(Single Responsibility Principle) - 단일 책임 원칙 객체지향 5대원칙 중 처음의 S에 해당하는것으로 SRP(Single Responsibility Principle) - 단일 책임 원칙 하나의 객체는 반드시 하나의 기능만을 수행하는 책임을 가지면서 클래스를 변경해야 하는 이유는 오직 하나뿐이어야 한다는 의미다. 그럼 예를 살펴보자 class Family: def __init__(self): self.member = None def setMember(self, member): self.member = member def Work(self): if self.member == 'Monther': print("집안일을 하신다."); if self.member == 'Father': print("회사일을 하신다.") if __name__ == "__main__":.. 2023. 5. 24. 이전 1 다음 반응형