개방 폐쇄 원칙 예제

개방형 닫힌 원칙 실제 예제를 보려면 Spring 프레임워크를 살펴보십시오. Spring은 디자인과 구현이 매우 아름답게 구현되어 기능의 일부를 확장하고 사용자 정의 구현을 즉시 사용할 수 있습니다. 그것은 아주 잘 시간 테스트 하 고 오늘또한 완벽 한 작업. 명백하게, 이것은 개방 폐쇄 원칙의 명백한 위반이다. 새 기능에 대한 지원을 추가하려면 클래스를 수정해야 합니다. 실제로 ClaimApprovalManager 클래스를 작성한 첫 번째 인스턴스에서 개방형 폐쇄 원칙을 위반했습니다. 이는 현재 예제에서 무해한 것처럼 보일 수 있지만 빠르게 변화하는 비즈니스 요구에 보조를 맞춰야 하는 엔터프라이즈 응용 프로그램의 결과를 고려합니다. 각 변경마다 전체 응용 프로그램을 수정, 테스트 및 배포해야 합니다. 따라서 응용 프로그램을 확장하기가 취약하고 비용이 많이 들뿐만 아니라 소프트웨어 버그가 발생하기 쉽습니다. 객체 지향 프로그래밍에서 개방/폐쇄 원칙은 “소프트웨어 엔터티(클래스, 모듈, 함수 등)는 확장을 위해 열려 있어야 하지만 수정을 위해 닫혀야 합니다.” [1] 즉, 이러한 엔터티는 소스 코드를 수정하지 않고 해당 동작을 확장할 수 있습니다.

클래스는 컴파일되고 라이브러리에 저장되고 기준이 조정되고 클라이언트 클래스에서 사용할 수 있으므로 닫힙니다. 그러나 새 클래스가 부모로 사용할 수 있으므로 새 기능이 추가되므로 열려 있습니다. 하위 클래스가 정의되면 원본을 변경하거나 해당 클라이언트를 방해할 필요가 없습니다. [4] OCP는 일반적인 해결책이 아니라 원칙일 뿐입니다. 엔터티가 고려해야 할 사항을 설명하지만 특정 솔루션을 제공하지는 않습니다. 정렬 메서드를 디자인 한 좋은 사람은 비교 가능한 인터페이스를 사용하여 확장에 개방 할 수 있습니다. 메서드는 비교 가능한 개체 목록을 정렬 하고 compareTo 메서드를 정렬 기준으로 사용합니다. 그러나 이것은 단지 예입니다. 이 원칙을 존중하는 방법은 하나도 없습니다. 그러나 이를 달성하는 데 도움이되는 몇 가지 좋은 일반적인 패턴이 있습니다. 리스코프 대체 원칙에 대한 이 시리즈의 다음 기사는 https://medium.com/@jim_ej/the-liskov-대체-원칙-그리고 왜-당신이-원하는-그것-6f5bbb05c06d에 있습니다. 1990년대에 개방/폐쇄 원칙은 구현을 변경할 수 있고 여러 구현을 만들고 다각적으로 서로 대체할 수 있는 추상화 된 인터페이스의 사용을 참조하기 위해 널리 재정의되었습니다.

나중에, 그는 자신의 SOLID 원칙에 포함 할 때, 밥 마틴은 더 나은 표현 : 이 원칙의 범위가 응용 프로그램의 유지 보수성을 성장하는 경우, 왜 구성 요소를 수정을 위해 폐쇄해야합니까? 모든 소프트웨어 엔터티는 수행하도록 설계된 작업을 수행하는 방법을 알고 있어야 합니다. 예를 들어 Collections.sort 메서드는 비교 가능한 인터페이스를 구현하는 모든 것을 정렬하는 방법을 알고 있습니다. 이 메서드는 정수 또는 문자열만 정렬하는 데만 국한되지 않고 특정 형식에 국한되지 않습니다. 비교 가능한 인터페이스를 구현하는 개체 컬렉션이 있는 경우 Collections.sort 메서드를 사용하여 정렬할 수 있습니다. 정렬 알고리즘은 설계대로 작동하므로 수정에 닫혀 있다고 말할 수 있지만 정렬 기준은 compareTo 메서드 구현에 따라 달라질 수 있으므로 모든 소프트웨어 엔터티의 구현은 수정을 위해 닫아야합니다. 동작이 변경되면 특정 엔터티의 작동 방식을 변경하면 확장하기만 하면 됩니다. 정렬 방법에 의존하는 방대한 수의 소프트웨어 응용 프로그램을 생각해 보십시오. 그것은 실제 응용 프로그램에서 테스트, 그것은 좋은 작동, 그것은 최적입니다.

Geplaatst in Geen categorie