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
반응형