Doc Brown의 답변은 정확에 가장 가깝고 다른 답변은 공개 폐쇄 원칙에 대한 오해를 보여줍니다.
명시 적으로 오해를 명확하게하기 위해, OCP는 이전 버전과 호환되지 않는 변경해서는 안 것을 의미 믿음있을 것 같습니다 (또는 심지어 어떤 이 라인을 따라 변경 또는 무언가를하십시오.) OCP 당신이하지 않도록 구성 요소를 설계에 관한 필요 에 변경 사항이 이전 버전과 호환되는지 여부에 관계없이 기능을 확장하도록 변경하십시오. 기능을 추가하는 것 외에 컴포넌트가 이전 버전과 호환되는지 (예 : 리팩토링 또는 최적화) 또는 이전 버전과 호환되지 않는지 (예 : 기능 사용 중단 및 제거) 구성 요소를 변경할 수있는 다른 많은 이유가 있습니다. 이러한 변경이 구성 요소가 OCP를 위반 한 것을 의미하는 것은 아니다 (확실히 것을 의미하지 않는다 할 수 있다는 것을 당신 OCP를 위반하고 있습니다).
실제로, 그것은 소스 코드에 관한 것이 아닙니다. OCP에 대한보다 추상적이고 관련성있는 진술은 "컴포넌트는 추상화 경계를 위반하지 않고도 확장 할 수 있어야한다"는 것입니다. 더 나아가서보다 현대적인 표현은 "컴포넌트는 추상화 경계를 강화 해야 하지만 확장을 허용 해야한다 "는 것입니다. Bob Martin의 OCP에 실린 기사에서도 "소스 코드가 잘못되었다"고 "수정에 가깝게"설명하는 동안 소스 코드 수정과는 아무런 관련이없는 캡슐화와 추상화와 관련된 모든 것에 대해 이야기하기 시작합니다. 경계.
따라서 문제의 잘못된 전제는 OCP가 코드베이스의 진화에 대한 지침으로 의도된다는 것입니다. OCP는 일반적으로 "컴포넌트는 확장에 개방적이어야하며 소비자가 수정해야하는 폐쇄 형"으로 표시됩니다. 기본적으로 구성 요소 소비자 가 구성 요소 에 기능 을 추가 하려면 이전 기능 을 추가 기능이있는 새로운 구성 요소로 확장 할 수 있어야하지만 이전 구성 요소 를 변경할 수는 없습니다 .
OCP는 기능을 변경 하거나 제거 하는 구성 요소 작성자 에 대해 아무 말도하지 않습니다 . OCP는 버그 호환성 유지를 옹호하지 않습니다 . 제작자 인 귀하는 구성 요소를 변경하거나 제거하여 OCP를 위반하지 않습니다. 소비자가 구성 요소에 기능을 추가 할 수있는 유일한 방법은 예를 들어 원숭이 패치 등을 통해 변경하는 것만으로도 귀하 또는 귀하가 작성한 구성 요소가 OCP를 위반하는 것입니다.또는 소스 코드에 액세스하여 재 컴파일합니다. 대부분의 경우 이러한 옵션 중 어느 것도 소비자를위한 옵션이 아니며, 구성 요소가 "확장 가능"상태가 아니면 운이 나쁘다는 의미입니다. 그들은 단지 당신의 구성 요소를 그들의 요구에 사용할 수 없습니다. OCP는 최소한 식별 가능한 "확장"클래스와 관련하여 라이브러리의 소비자를이 위치에 두지 말 것을 주장합니다. 소스 코드 또는 소스 코드의 기본 복사본을 수정할 수 있는 경우에도 그렇게 할 수있는 잠재적 인 부정적인 결과가 많으므로 수정할 수없는 것으로 가장하는 것이 가장 좋습니다.
따라서 귀하의 질문에 답변하십시오 : 아니요, 이는 OCP 위반이 아닙니다. OCP는 변경의 비율이 아니기 때문에 작성자가 변경 한 내용은 OCP를 위반할 수 없습니다. 변화는, 그러나, 수 만들 OCP를 위반, 그들은 코드베이스의 이전 버전에서 OCP의 실패에 의해 좌우 될 수있다. OCP는 코드베이스의 진화 이력이 아닌 특정 코드 조각의 속성입니다.
대조적으로, 이전 버전과의 호환성은 코드 변경 의 속성입니다 . 일부 코드가 이전 버전과 호환되거나 호환되지 않는다고 말하는 것은 의미가 없습니다. 오래된 코드 와 관련하여 일부 코드의 이전 버전과의 호환성에 대해서만 이야기하는 것이 합리적 입니다. 따라서 일부 코드의 첫 번째 컷이 이전 버전과 호환되는지 여부에 대해 이야기하는 것은 의미가 없습니다. 코드의 첫 번째 컷은 OCP를 만족 시키거나 만족시키지 못할 수 있으며, 일반적으로 우리는 코드의 이전 버전을 참조하지 않고 일부 코드가 OCP를 만족하는지 여부를 결정할 수 있습니다.
마지막 질문에 관해서는, 일반적으로 의견을 기반으로하는 것은 일반적으로 StackExchange의 주제는 아니지만 논란의 여지가 있지만 기술과 특히 JavaScript는 지난 몇 년 동안 기술 한 현상이 JavaScript 피로 라고 불리는 JavaScript에 환영 받습니다. ( 여러 가지 관점에서 이에 대해 이야기하는 풍자적 인 다양한 기사를 찾으 려면 Google 에 자유롭게 문의하십시오.)