728x90
반응형
I - ISP - Interface Segregation Principle (인터페이스 분리 원칙)
특정 클라이언트를 위한 인터페이스 여러개가 범용 인터페이스 하나보다 낫다.
클래스에서 사용하지 않는 메서드는 분리해야 한다.
차량 소유주 정보는 변경점이 없어 그대로 구현
class CarOwnerInfo:
def __init__(self, car_number, owner_name):
self.__car_number = car_number
self.__owner_name = owner_name
@property
def car_number(self):
return self.__car_number
@car_number.setter
def car_number(self, value):
self.__car_number = value
@property
def owner_name(self):
return self.__owner_name
@owner_name.setter
def owner_name(self, value):
self.__owner_name = value
def show(self):
print('Car number : {} / Owner name : {}'.format(self.car_number, self.owner_name))
class SuvOwnerInfo(CarOwnerInfo):
pass
class TruckOwnerInfo(CarOwnerInfo):
pass
트렁크 타입에 따른 인터페이스를 추가하여 분산 구현
class CarDetailInfo(metaclass = ABCMeta):
def __init__(self, color, wheel):
self.__color = color
self.__wheel = wheel
@abstractmethod
def show(self):
pass
@property
def color(self):
return self.__color
@property
def wheel(self):
return self.__wheel
class SuvDetailInfo(CarDetailInfo):
def show(self):
print('Color : {} / Wheel : {}'.format(self.color, self.wheel))
class TrunkType1(metaclass = ABCMeta):
is_trunk_opened = False
trunk_kind = None
@abstractmethod
def covered(self, value):
pass
@abstractmethod
def opened(self):
pass
class TruckDetailInfo(CarDetailInfo, TrunkType1):
def covered(self, value):
self.is_trunk_opened = False
self.trunk_kind = value
def opened(self):
self.is_trunk_opened = True
def show(self):
print('Color : {} / Wheel : {} / Trunk : {} {}'.format(self.color, self.wheel, self.trunk_kind, self.is_trunk_opened))
참고
728x90
반응형
'IT' 카테고리의 다른 글
소프트웨어 개발원칙 KISS (0) | 2021.01.22 |
---|---|
소프트웨어 개발 원칙 DRY (0) | 2021.01.22 |
객체지향 설계 5대 원리 SOLID - OCP (0) | 2021.01.21 |
객체지향 설계 5대 원리 SOLID - SRP (0) | 2021.01.21 |
객체지향 설계 5대 원리 SOLID (0) | 2021.01.21 |