문제

이 질문은 이미 여기에 답이 있습니다.

사용에 대해 어떻게 생각하십니까? 개인 정적 방법?

개인적으로, 나는 a를 선호합니다 공전 개인 방법 비 정적 인스턴스 필드에 액세스 할 필요가없는 한

그러나이 관행이 OOP 원칙을 위반한다고 들었습니다.

편집 : 나는 성능이 아니라 스타일의 시야에서 궁금합니다.

도움이 되었습니까?

해결책

private static 메소드 자체는 OOP 자체를 위반하지 않지만 인스턴스 필드에 액세스 할 필요가없는 클래스에 이러한 메소드가 많을 때 "개체"가 암시하기 때문에 OO 방식으로 프로그래밍하지 않습니다. 해당 상태에 대한 주 + 운영이 함께 정의되었습니다. 주가 필요하지 않으면 왜이 방법을 해당 수업에 넣는가?

(*) = 원칙적으로, 자바의 클래스 수준 가시성으로 인해 클래스의 정적 방법입니다. 가지다 예를 들어 해당 클래스의 객체의 인스턴스 필드에 대한 액세스 (예 :

class Test
{
  int field = 123;

  private static void accessInstance(Test test)
  {
    System.out.println(test.field);
  }
}

인스턴스에 대한 참조로 전달해야합니다 (this 포인터) 물론, 물론, 그러나 당신은 본질적으로 인스턴스 방법을 모방합니다. 완전성을 위해 이것을 언급합니다.

다른 팁

위에서 언급 한 바와 같이, 개인 정적 방법은 종종 재사용 논리를 구성하고 반복 코드를 줄/제거하는 데 유용합니다. 이 토론에서 성과에 대한 언급을 알지 못한 것에 놀랐습니다. Renaud Waldura의 'Final on Final의 마지막 단어'에서 :

(참고, 개인 정적 방법은 암시 적으로 최종입니다)

"최종 방법은 선언 클래스에서만 구현되므로 최종 방법으로 호출을 동적으로 발송할 필요가 없으며 대신 정적 호출을 사용할 수 있습니다. 컴파일러는 메소드를 직접 호출하여 평소를 완전히 우회 할 수 있습니다. 가상 메소드 호출 절차. 이로 인해 최종 방법은 정시 컴파일러 또는 유사한 최적화 도구로 인한 후보이기도합니다. (개인/정적 메소드는 이미 최종적이므로 항상이 최적화를 위해 고려됩니다. "

종이 전체를 확인하십시오. http://renaud.waldura.com/doc/java/final-keyword.shtml

Private 또는 Public은 차이를 만들지 않습니다. 정적 메소드는 괜찮지 만, 항상 사용하고있는 경우 (그리고 인스턴스 필드에 액세스하지 않는 인스턴스 메소드는 기본적 으로이 목적을위한 정적 메소드입니다), 그런 다음 디자인을 다시 생각해야 할 것입니다. 항상 가능하지는 않지만 대부분의 시간 방법은 그들이 작동하는 데이터와 함께 존재해야합니다. 이것이 OOP의 기본 아이디어입니다.

나는 당신이하고있는 일에 반드시 실제 문제를 보지는 않지만, 첫 번째 질문은 방법이 인스턴스 필드에 액세스 할 필요가 없다면, 처음에 해당 클래스에서 무엇을하고 있습니까?

그것은 맛의 문제이지만, 나는 객체 정적 내에서 상태에 반응하지 않는 방법을 만든다. 이 방법으로 정적 함수에 유사한 기능이 필요한 경우 코드를 다시 작성할 필요가 없습니다. 분류 기능은 그러한 경우의 좋은 예입니다.

나는 개인 정적 방법을 사용하지 않는 경향이 있습니다. 나는 공개 정적 방법을 사용하여 재사용을 촉진하기 위해 Util 클래스로 그룹화합니다.

개인 정적 방법은 예를 들어 클래스의 개인 정적 구성원에서 작동 할 수 있습니다. 이는 특정 클래스 특정 작업을 캡슐화하고 통합하는 데 사용될 수 있습니다.

정적 방법을 사용하는 주요 단점은 제 생각에는 무시할 가능성을 버린다는 사실입니다. Java의 수업은 Smalltalk의 수업과는 다르지 않기 때문에 정적 방법을 무시할 수 없습니다.

귀하의 질문은 개인 정적 메소드와 관련이 있으므로 어쨌든 재정의는 옵션이 아닙니다.

유틸리티 클래스 (java.lang.math)의 경우에만 정적 메소드를 사용하거나 싱글 톤 패턴과 같은 패턴을 사용하는 경향이 있습니다. 이들 모두는 비공개보다 더 높은 가시성이 필요합니다. 왜냐하면 그들은 다른 사람들에게 수업에서 제공하는 서비스를 나타 내기 때문입니다.

최종 사고 : 하나 이상의 개인 정적 방법이 있다면 전용 유틸리티 클래스로 추출하여 공개적으로 만드는 방법을 생각해보십시오. 더 나은 방법으로 인스턴스 방법을 만들고 싱글 톤 패턴을 사용하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top