2015-01-08 2 views
2

저는 프레임 워크 라이브러리를 작성하고 있습니다.이 프레임 워크 라이브러리에서는 라이브러리 외부에서 호출되지 않도록하는 방법 만 재정의하려고합니다. 그러나 그들에게 public을 만들 때 보안상의 위험이 없습니다. 재정의 할 방법이 라이브러리에서 public으로 선언되고 protected은 보안 위험이있는 경우에만 사용된다는 인상을 받았습니까? 공개 할 수있는 보안 위험이 없다면 어느 하나를 선택해야 할 이유가 있습니까?Java : 재정의하려는 라이브러리 메소드에 대한 protected 또는 public 액세스?

+0

일반적인 조언은'protected'를 사용하는 것이라고 생각합니다. 누군가 공개로 원할 경우 공개 할 수도 있고 같은 패키지에서 사용할 수도 있습니다. –

답변

3

리플렉션이 패키지 액세스를 우회 할 수 있으므로 보안은 절대로 당면하지 않습니다. '보호'란 누군가가 클래스 외부 나 그 서브 클래스에서 메소드를 호출하면 클래스가 현명한 방식으로 작동하도록 설계되지 않은 인간과 통신하는 방법입니다.

1

이것은 기본적으로 스타일의 문제입니다. 내 경험에 비추어 볼 때 가장 제한적인 정책을 사용할 수 있습니다 (예 : protected ~ public). 앞으로 이러한 방법을 폭로하기로 결정했다면 항상 public으로 만들 수 있습니다. 그것들을 public으로 시작하여 나중에 서명을 변경해야하는 경우 실수로 실수로 사용한 적이있는 다른 사람의 코드를 손상시킬 위험이 있습니다.

+0

"음부가 '음부'이고 [...] '제발, 음부가 아닌'공개 '로 만들어주십시오. ;) –

+1

@MartinThorsenRanang 오타가가는 한, 이것은 당황스러운 것 중 하나입니다. 그 점을 지적 해 주셔서 감사합니다. 수정 및 수정 됨. – Mureinik

0

구현을 자유롭게 변경할 수 있도록 분리를 유지하려는 경우 구현 개체 자체를 노출하지 마십시오. 대신 사용자에게 필요한 기능을 가진 인터페이스를 구현하는 객체를 제공하는 팩토리를 제공하십시오.

그런 식으로 구현에 대한 메서드를 공개 할 수는 있지만 게시 된 인터페이스의 일부가 될 수는 없기 때문에 클라이언트는 명시 적으로 구현 클래스에 캐스팅하지 않고도 해당 메서드를 볼 수 없습니다.

관련 문제