공개 원칙의 의도를 이해합니다. 수정하지 않고 확장하도록 지시함으로써 수정하는 동안 이미 작동하는 것을 깨뜨릴 위험을 줄입니다.
그러나이 원칙이 실제로 어떻게 적용되는지 이해하는 데 어려움이있었습니다. 내 이해에는 두 가지 방법이 있습니다. 변경 전과 후에 :
이전 : 추상화에 프로그래밍하고 가능한 한 '미래를 예측'하십시오. 예를 들어, 향후 시스템에 s가 추가
drive(Car car)
되면 방법 이 변경Motorcycle
되어 OCP를 위반할 수 있습니다. 그러나이 방법drive(MotorVehicle vehicle)
은 향후 변경 될 가능성이 적으므로 OCP를 준수합니다.그러나 미래를 예측하고 시스템에 어떤 변화가 있을지 미리 알기는 매우 어렵습니다.
이후 : 변경이 필요한 경우 현재 코드를 수정하는 대신 클래스를 확장하십시오.
연습 # 1은 이해하기 어렵지 않습니다. 그러나 신청 방법을 이해하는 데 어려움이있는 것은 연습 # 2입니다.
예를 들어 (YouTube의 비디오에서 가져 왔습니다) : 클래스에 CreditCard
객체 를 허용하는 메소드가 있다고 가정 해 봅시다 makePayment(CraditCard card)
. 하루 Voucher
가 시스템에 추가됩니다. 이 방법은 지원하지 않으므로 수정해야합니다.
처음에 메소드를 구현할 때 미래와 프로그램을 더 추상적 인 용어로 예측하지 못했습니다 (예 : makePayment(Payment pay)
이제 기존 코드를 변경해야 함).
실습 # 2는 수정하는 대신 확장하여 기능을 추가해야한다고 말합니다. 그게 무슨 뜻이야? 기존 코드를 단순히 변경하는 대신 기존 클래스를 서브 클래 싱해야합니까? 코드를 다시 쓰지 않기 위해 래퍼를 만들어야합니까?
또는 원칙은 '기능을 올바르게 수정 / 추가하는 방법'을 말하는 것이 아니라 '처음에 프로그램을 변경하지 않아도되는 방법 (예 : 추상화에서 추상화)'을 말하는가?