IT

객체지향 설계 5대 원리 SOLID - IRP

상쾌한기분 2021. 1. 22. 12:13
반응형

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))

 

참고

www.fun-coding.org/PL&OOP2-1.html

728x90
반응형