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
반응형
'IT' 카테고리의 다른 글
소프트웨어 개발 원칙 DRY (0) | 2021.01.22 |
---|---|
객체지향 설계 5대 원리 SOLID - IRP (0) | 2021.01.22 |
객체지향 설계 5대 원리 SOLID - SRP (0) | 2021.01.21 |
객체지향 설계 5대 원리 SOLID (0) | 2021.01.21 |
통신사별 DNS IP 리스트 (구글, SKT, KT, LG) (0) | 2020.05.06 |