IT

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

상쾌한기분 2021. 1. 21. 16:45
728x90
반응형

O - OCP - Open/Closed Principle (개방/폐쇄 원칙)

소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다.

 

Truck 외에 차량 종류가 추가 될 경우 공통 속성을 가지는 Car Interface로 추상화를 합니다.

class Car:
    id_number = None
    owner_info = None
    detail_info = None

    def __init__(self, id_number, owner_info: CarOwnerInfo, detail_info: CarDetailInfo):
        self.id_number = id_number
        self.owner_info = owner_info
        self.detail_info = detail_info


class Suv(Car):
    pass


class Truck(Car):
    pass

이어서 차정보, 소유주 정보를 관리하는 Class 도 이어 추상화 작업을 해줍니다.

class CarOwnerInfo:
    car_number = None
    owner_name = None


class SuvOwnerInfo(CarOwnerInfo):
    pass


class TruckOwnerInfo(CarOwnerInfo):
    pass


class CarDetailInfo:
    color = None
    wheel = None


class SuvDetailInfo(CarDetailInfo):
    pass


class TruckDetailInfo(CarDetailInfo):
    pass

 

여기서 만약 트럭은 일반 차량과 달리 트렁크가 커버 등으로 둘러 쌓여 있는 경우도 있고 다른 차량처럼 노출 되지 않는 등 다양한 형태를 가지고 있고 이에 대해서 추가 정보가 필요하다고 한다면?

class CarDetailInfo:
    color = None
    wheel = None


class SuvDetailInfo(CarDetailInfo):
    pass


class TruckDetailInfo(CarDetailInfo):
    is_trunk_opened = False
    trunk_kind = None

CarDetailInfo는 변경 없이 TruckDetailInfo 안에서 추가를 할 수 있다.


여기서 확장성 고려 더 추상화 작업을 한다고 하면?

class Vehicle:
    car_number = None
    owner_name = None


class Car(Vehicle):
    pass


class MotorCycle(Vehicle):
    pass

탈 것으로 추상화를 할 수 있을 것이다. 이렇게 한다면 나중에 바퀴 수 정보 등 변경에 용이하게 할 수 있다.

728x90
반응형