개인 사용시기와 클래스에서 protected 사용시기에 관한 이 질문 은 저를 생각하게했습니다. (이 질문은 최종 클래스 및 메소드와 관련이 있기 때문에 확장 할 것입니다. Java로 프로그래밍 중이지만 모든 OOP 언어와 관련이 있다고 생각합니다)
경험상 가장 좋은 방법은 모든 것을 가능한 한 비밀로 만드는 것입니다.
- 즉시 서브 클래스를 작성하지 않으면 모든 클래스를 최종 클래스로 만듭니다.
- 서브 클래 싱하고 즉시 재정의 할 필요가없는 한 모든 메소드를 최종으로 만드십시오.
- 메소드의 본문 내에서 변경하지 않는 한 모든 메소드 매개 변수를 최종으로 지정하십시오. 어쨌든 대부분의 경우 다소 어색합니다.
이것은 매우 간단하고 명확하지만 응용 프로그램 대신 주로 라이브러리 (GitHub의 오픈 소스)를 작성하는 경우 어떻게됩니까?
많은 도서관과 상황을 말할 수 있습니다.
- 개발자가 생각하지 못한 방식으로 라이브러리가 확장되었습니다.
- 가시성 제약으로 인해 "클래스 로더 매직"및 기타 해킹으로 수행해야합니다.
- 라이브러리는 빌드되지 않은 방식으로 사용되었으며 필요한 기능 방식은 "해킹"되었습니다.
- 작은 가시성 (버그, 기능 누락, "잘못된"동작)으로 인해 라이브러리를 사용할 수 없었습니다. 가시성 감소로 인해 변경할 수 없었습니다.
- 해결할 수없는 문제로 인해 간단한 기능 (비공개 또는 최종 기능)을 재정의하는 데 도움이 될 수있는 거대하고 못생긴 버그 해결 방법이 생겼습니다.
그리고 실제로 질문이 너무 길어질 때까지 이러한 이름을 짓기 시작했으며 제거하기로 결정했습니다.
필자는 필요한 것보다 많은 코드, 필요한 것보다 더 많은 가시성, 필요한 것보다 더 많은 추상화가 없다는 아이디어를 좋아합니다. 그리고 이것은 최종 사용자를위한 응용 프로그램을 작성할 때 작동 할 수 있으며, 코드를 작성하는 사람 만 코드를 사용합니다. 그러나 코드가 다른 개발자가 사용하도록 의도 된 경우 어떻게해야합니까? 원래 개발자가 가능한 모든 사용 사례를 미리 생각하고 변경 / 리 팩터를 수행하기가 어렵거나 불가능하다는 것이 불가능합니까?
큰 오픈 소스 라이브러리는 새로운 것이 아니기 때문에 객체 지향 언어를 사용하여 이러한 프로젝트에서 가시성을 처리하는 가장 일반적인 방법은 무엇입니까?