저는 프레임 워크 라이브러리를 작성하고 있습니다.이 프레임 워크 라이브러리에서는 라이브러리 외부에서 호출되지 않도록하는 방법 만 재정의하려고합니다. 그러나 그들에게 public
을 만들 때 보안상의 위험이 없습니다. 재정의 할 방법이 라이브러리에서 public
으로 선언되고 protected
은 보안 위험이있는 경우에만 사용된다는 인상을 받았습니까? 공개 할 수있는 보안 위험이 없다면 어느 하나를 선택해야 할 이유가 있습니까?Java : 재정의하려는 라이브러리 메소드에 대한 protected 또는 public 액세스?
답변
리플렉션이 패키지 액세스를 우회 할 수 있으므로 보안은 절대로 당면하지 않습니다. '보호'란 누군가가 클래스 외부 나 그 서브 클래스에서 메소드를 호출하면 클래스가 현명한 방식으로 작동하도록 설계되지 않은 인간과 통신하는 방법입니다.
이것은 기본적으로 스타일의 문제입니다. 내 경험에 비추어 볼 때 가장 제한적인 정책을 사용할 수 있습니다 (예 : protected
~ public
). 앞으로 이러한 방법을 폭로하기로 결정했다면 항상 public
으로 만들 수 있습니다. 그것들을 public
으로 시작하여 나중에 서명을 변경해야하는 경우 실수로 실수로 사용한 적이있는 다른 사람의 코드를 손상시킬 위험이 있습니다.
"음부가 '음부'이고 [...] '제발, 음부가 아닌'공개 '로 만들어주십시오. ;) –
@MartinThorsenRanang 오타가가는 한, 이것은 당황스러운 것 중 하나입니다. 그 점을 지적 해 주셔서 감사합니다. 수정 및 수정 됨. – Mureinik
구현을 자유롭게 변경할 수 있도록 분리를 유지하려는 경우 구현 개체 자체를 노출하지 마십시오. 대신 사용자에게 필요한 기능을 가진 인터페이스를 구현하는 객체를 제공하는 팩토리를 제공하십시오.
그런 식으로 구현에 대한 메서드를 공개 할 수는 있지만 게시 된 인터페이스의 일부가 될 수는 없기 때문에 클라이언트는 명시 적으로 구현 클래스에 캐스팅하지 않고도 해당 메서드를 볼 수 없습니다.
- 1. protected enum에 대한 액세스
- 2. protected/public 내부 클래스
- 3. JS에서 Java 메소드에 액세스
- 4. 클래스의 const 속성이 public 또는 protected 여야합니까?
- 5. 메서드가 Public, Protected 또는 Private PHP인지 확인하는 방법?
- 6. 보호 된 메소드에 대한 액세스 수정 자
- 7. scala에서 public static java 메서드에 액세스
- 8. Java Spring MVC에서 메소드에 대한 동시 액세스 방지하기
- 9. 다른 Java 클래스에 대한 메소드에 액세스해야합니다.
- 10. diff 패키지에서 Java protected membes 액세스
- 11. 서비스의 모든 public 메소드에 대한 AOP pointcut 표현
- 12. 메소드에 대한 인수로 Java 인터페이스
- 13. Protected Member에 관한 액세스
- 14. C++ 클래스 (public, private 및 protected)
- 15. Java 코드를 사용하여 .NET dll의 메소드에 액세스
- 16. EJB에서 ManagedBean 메소드에 액세스
- 17. 메소드에 대한 @Valid 주석 (Java EE 6)
- 18. MATLAB : uigetdir의 내부 Java 메소드에 액세스
- 19. .Net의 "종류"의 public 메소드에 대한 일부 컴파일러 도움말
- 20. 기본 메소드에 대한 Java 예외 스펙
- 21. Java : Protected Method Before Interface
- 22. Java : arraylist의 객체에서 서브 클래스 메소드에 액세스
- 23. 번들로 Eclipse RCP의 메소드에 대한 액세스 제한
- 24. NPAPI 플러그인에서 NPN_ 메소드에 액세스
- 25. j2ee의 HTTP 메소드에 대한 액세스 거부
- 26. Java ScriptEngineManager가 특정 Java 메소드에 액세스하도록 허용
- 27. 메소드에 변수 전달 (Java)
- 28. HttpServletRequest에 대한 컨트롤러 라이브러리 직접 액세스
- 29. Java : [email protected]
- 30. [유일한] "public" "private" "protected"강조 표시를위한 Eclipse 옵션
일반적인 조언은'protected'를 사용하는 것이라고 생각합니다. 누군가 공개로 원할 경우 공개 할 수도 있고 같은 패키지에서 사용할 수도 있습니다. –