'private'메소드가 'protected'메소드로 수행 할 수없는 작업을 수행하는 구체적인 예를 들어 줄 수 있습니까? 즉, 왜 언어 디자이너가 Ruby에 '개인용'메소드를 넣을지 알고 싶습니다.Ruby에서 'private'메소드가 필요한 이유
답변
정말 개발 팀과 코드가 어떻게 사용되는지에 따라 다릅니다. Ruby에서 이러한 태그는 종종 하드 및 빠른 규칙보다 많은 제안 사항이며 필요에 따라 private
및 protected
메서드를 우회하는 방법이 있지만 코드를 사용하는 사람이이를 호출하는 것이 바람직하지 않음을 알리는 강력한 힌트가 될 수 있습니다.
private
은 무언가를 서브 클래스로 만들려고 노력하는 사람들에게 삶을 매우 어렵게 만들 수 있으므로 조심스럽게 사용해야합니다. 보통 protected
이면 충분하며, 외부 코드를 해야하는 방법으로 조정하는 데 도움이됩니다.
private
이 필요한 경우가 있습니다. 즉, 하위 클래스가 상위 클래스의 작동 방식을 너무 많이 알지 못하도록하려는 경우입니다. 이것은 사람들에게 서브 클래스를 장려하는 라이브러리에서 더 일반적이지만, 사용자가 사용하려고하지 않는 내부 기능 중 일부를 벽으로 막고 싶을 수도 있습니다. 이렇게하면 다른 사람의 코드를 손상시키지 않고 나중에 이러한 메소드를 리펙토링 할 수 있습니다.
좋은 객체 지향 디자인의 원칙 중 하나는 메소드 노출의 양을 제어하는 것입니다. 노출이 너무 많다는 것은 변경 사항을 적용 할 준비가되어 있지 않으면 현재와 미래에 동일하게 작동하도록하기 위해 최선을 다하고 있음을 의미합니다. 노출이 너무 적 으면 쓸모가 없어도 수업을 사용하기 어려울 수 있습니다. 그 균형을 찾는 것은 항상 까다 롭습니다.
그래서 private
과 protected
이 존재하며, C++, Java, PHP, Python 및 기타 많은 사람들이 이러한 이유를 가지고있는 것과 거의 같습니다. 방법을 사용하는 방법과 위치를 제어 할 수 있습니다.
'private'이 서브 클래스 화하기가 어려운 예제를 줄 수 있습니까? –
@ JörgWMittag 당신이 당신의 방법에 대해 지나치게 보호하고 있고, 당신의 서브 클래스가 유용한 것을하기 위해 이러한'private' 메소드들 중 하나에 접근 할 필요가 있다면, 그것이 문제 일 때입니다. 매우 상황이 좋지만 필요할 때 바로 유리 뒤에 잠겨 있기 때문에 언제 일어날 지 알 수 있습니다. – tadman
수퍼 클래스가 메서드를 서브 클래스에 액세스하는 것을 'private'로 설정하는 것을 방지 할 수있는 방법을 알지 못합니다. 'private'이 서브 클래스에있는 수퍼 클래스의 메소드에 접근하지 못하게하는 예제를 줄 수 있습니까? –
- 1. smtp에서 base64가 필요한 이유
- 2. 스레드가 필요한 이유
- 3. 디자인 패턴이 필요한 이유
- 4. Java에서 휘발성이 필요한 이유
- 5. 봄에 applicationcontextAware가 필요한 이유
- 6. 푸시 엔진이 필요한 이유
- 7. "rec"가 필요한 이유
- 8. JS에서 약속이 필요한 이유
- 9. lock_guard에 잠금 가능 개념이 필요한 이유 이유
- 10. 작곡가 덤프 - 자동로드가 필요한 이유
- 11. Lucene QueryParser에 분석기가 필요한 이유
- 12. Nginx에서 메모리 정렬이 필요한 이유
- 13. .NET에서 참조 형식이 필요한 이유
- 14. 이 Ruby 쿼리가 필요한 이유
- 15. .NET에서 절대 경로가 필요한 이유
- 16. WPF에 자동화 속성이 필요한 이유
- 17. angular2에 노드 5가 필요한 이유
- 18. 플러시 후에 readfile이 필요한 이유
- 19. LocationListener에 인터넷 연결이 필요한 이유
- 20. 이 어셈블리 라인이 필요한 이유
- 21. NSManagedObject에 임시 ID가 필요한 이유
- 22. WCF가 필요한 이유 (이 시나리오에서)?
- 23. 별도의 인덱스 테이블이 필요한 이유
- 24. WCF 서비스에서 mexHttpBinding이 필요한 이유
- 25. 개체 안에 함수를 호출하는 데 "this"가 필요한 이유 이유
- 26. 프로브 응답이있을 때 비콘이 필요한 이유
- 27. 파일 설명자와 파일 포인터가 모두 필요한 이유
- 28. C++에서 중첩 클래스가 필요한 이유
- 29. SQL Server Integration Services가 서비스로 필요한 이유
- 30. android에서 init.rc에 setprop ro.nfc.port가 필요한 이유
당신은 그들이 보호되거나 공개 된 것 이상의 기능을 사용하지 않는다고합시다. 사실, 그들은 기능을 제거합니다 - 구체적으로 말하자면, 그들은 정의 된 클래스/모듈 외부에서 메소드를 실행하는 것을 약간 더 어렵게 만듭니다. 다른 메소드에 의해 내부적으로 사용되는 도우미 메소드를 고려하십시오. 라이브러리를 사용하는 누군가는이 도우미 메서드를 직접 호출하지 않을 것입니다. 비공개로 표시 될 수 있으므로 소스 코드를 탐색하는 누군가가이 기능을 인식합니다. 그것은 기능을 추가하지는 않지만 typechecking과 비슷하지만, 개발자가 쉽게 살 수있게합니다. –
내가 찾은 개인 메서드 중 하나는 '전역'메서드 (모든 클래스 외부에서 정의 된 메서드)를 정의하는 데 사용된다는 점입니다. 이러한 메서드는 Object의 private 메서드가되고 수신기가 없어도 호출 될 수 있으므로 더 많은 비 객체 지향 스타일을 모방합니다. . 그러나 이것은 언어 디자인 문제보다 '구문 적 설탕'기능에 더 가깝습니다. –
나는 정말로 이해하지 못한다. 글로벌 범위에서 전역 메소드, 즉'def foo'를 정의하는 경우. 그것의 공개 또는 비공개라면 어떤 차이가 있습니까? 두 경우 모두'foo'를 호출 할 수 있습니다. private 또는 protected가 메소드를 호출하는 것을 결코 완전히 막지는 않는다는 것을 언급 할 가치가 있습니다. 단지'send'가 때때로 사용되도록 요구합니다. –