2013-02-17 2 views
0

메소드 선언에 공용 개인 보호 키워드를 사용하면 어떤 이점이 있습니까? 는 특정 클래스개인, 보호, 공개 및 나를 혼동합니다.

외부 개체에 의해 불필요한 "값 변경"을 방지 할 수 있지만이 키워드를 넣어의 혜택을 상상할 수 없기 때문에

나는 변수에 대한 공공 개인 보호 키워드의 혜택을 상상할 수있다 ","개인 "또는 메서드 선언에서 "public"또는 "protected"

메서드가있는 경우 메서드를 사용할 수있는 유일한 개체가 해당 메서드를 포함하는 개체라는 것입니다.

+0

이 항목을 확인하십시오. http://stackoverflow.com/questions/2620699/why-private-methods-in-the-object-oriented. – zbyszek26104

답변

3

우선, public, protected, 패키지 및 private 액세스의 의미를 명확히합시다. 각각의 경우에 정적이 아닌 메서드를 사용하려면 개체가 있어야합니다. 그러나이 키워드는 개체에서 메서드를 호출 할 수있는 사용자를 나타냅니다.

  • public 메서드는 모든 사용자가 호출 할 수 있습니다.
  • protected 같은 패키지의 클래스 또는 다른 패키지의 하위 클래스에서 메소드를 호출 할 수 있습니다.
  • 패키지 개인 메서드 (모든 액세스 한정자없이)는 동일한 패키지의 클래스에서만 호출 할 수 있습니다.
  • private 메서드는 동일한 클래스에서만 호출 할 수 있습니다.

예를 들어, 나는 종종 여러 가지 방법 중에서 반복되는 코드를 제외시키기 위해 private 메서드를 사용합니다. 이 코드는 다른 클래스가 사용할 공용 인터페이스의 일부가 아닙니다. 오히려 그것은 클래스 자체에 대한 계산의 일부를 수행하는 "작업자"메소드입니다.

2

public은 메서드를 재정의 할 수 있으며 둘러싸는 클래스가 표시되는 모든 코드에서 사용할 수 있음을 의미합니다.

private은 해당 클래스가 사용할 수있는 메서드임을 나타냅니다.

protected은 메서드를 포함하는 클래스와 해당 클래스를 확장하는 모든 클래스에서만 호출 할 수 있음을 의미합니다.

패키지 (메서드 앞에 키워드 없음)는 메서드를 포함하는 클래스와 동일한 패키지에있는 클래스 내의 모든 코드에서 메서드를 호출 할 수 있음을 의미합니다.

In Java, difference between default, public, protected, and private

이 다른 키워드는 클래스가 사용되는 방법을 설계에 유용합니다. public 메소드는 클래스 사용자에게 노출되는 "계약서"의 일부입니다. private 메서드는 일반적으로 클래스의 사용자와의 "계약"을 위반하지 않고 나중에 바꾸거나 수정하려는 경우에 대비하여 논리를 숨기려고하기 때문에 외부 세계에 어떤 식 으로든 노출되어서는 안되는 구현 코드입니다.

protected 클래스를 확장하는 클래스에서 사용할 수있는 메서드가 있습니다. 어쩌면 당신이 오버라이드를 가능하게하고 싶은 구현이있을 수도 있습니다 - 아니면 클래스를 작동시키기 위해이 메소드를 구현하기 위해 확장 클래스가 필요하지만 클래스의 호출자에게 노출되는 "계약"의 일부가 아닙니다. 또는 확장 클래스를 호출하는 사람들.

package을 사용하여 패키지의 다른 클래스에서 호출 할 수 있지만 클래스를 사용하는 사용자 (사용자와의 "계약"에 속하지 않음)에 노출하고 싶지는 않은 구현 코드를 만듭니다. 패키지 레벨을 사용합니다. 메서드를 사용하여 단위 테스트에서 까다로운 구현 코드를 테스트해야하지만 메서드를 공개하지 않으려는 경우

2

메소드에 대한 액세스를 제한하는 이점을 이해하려면 다음을 고려하십시오. 클래스에서 private 메소드를 안전하게 변경하거나 심지어 클래스에서 액세스 할 수 있다는 것을 알고 있기 때문에 클래스에서 메소드를 안전하게 제거하거나 제거 할 수 있습니다. API를 게시하고 public 메소드를 노출 한 경우 해당 메소드가 유효합니다. 변경하려고하면 사용 가능한 코드가 손상됩니다. 코드를 완전히 이해하려면 시간이 지남에 따라 코드가 어떻게 발전 할 것인지 생각해야합니다.

메서드가있는 경우 메서드를 사용할 수있는 유일한 개체가 해당 메서드를 포함하는 개체라고 생각합니까?

아니요. 메소드는 정적으로 선언 될 수 있습니다. 즉, 메소드가 호출 될 필요가 없음을의 L합니다.