방금 내가 가진 질문을 정리하고 싶었습니다. 개인 가시성이있는 일반적인 방법과 달리 개인 정적 방법을 사용하는 요점은 무엇입니까?
정적 메소드를 사용하면 클래스의 인스턴스없이 호출 할 수 있다는 장점이 있다고 생각했을 것입니다. 그러나 비공개이기 때문에 정적이라는 점이 있습니까?
내가 생각할 수있는 유일한 이유는 객체 수준이 아닌 클래스 수준의 방법을 개념적으로 이해하는 데 도움이되기 때문입니다.
방금 내가 가진 질문을 정리하고 싶었습니다. 개인 가시성이있는 일반적인 방법과 달리 개인 정적 방법을 사용하는 요점은 무엇입니까?
정적 메소드를 사용하면 클래스의 인스턴스없이 호출 할 수 있다는 장점이 있다고 생각했을 것입니다. 그러나 비공개이기 때문에 정적이라는 점이 있습니까?
내가 생각할 수있는 유일한 이유는 객체 수준이 아닌 클래스 수준의 방법을 개념적으로 이해하는 데 도움이되기 때문입니다.
답변:
정적 인 특성은 가시성과 무관합니다.
정적 메소드 (비 정적 멤버에 의존하지 않는 일부 코드)를 사용하려는 이유는 여전히 유용합니다. 그러나 어쩌면 당신은 다른 사람 / 다른 사람이 그것을 사용하기를 원하지 않을 것입니다.
<
로 <
...이 기록 될 때 등,
&
에 &
[내가 코드를 작성했다, 나는 변환 줄 &
에 &
나는 그것이 필요하지만 가정 기대하지 않은 경우에도 그렇지 않습니다]. 그것은 나중에 앰퍼샌드를 처리 할 필요가 있지만,이 방법은 확장 변경, 공개 &
하는 &
자신의 수행 외부 코드를 깰 수 &
Di의 &
대체를. 그러나이 메소드가 개인용 인 &
경우 외부 코드에 문제를 일으키지 않고 처리하도록 수정 될 수 있습니다 .
(Java에서) 상당히 일반적인 이유는 private static
생성자 클러 터를 줄이기 위해 간단한 방법을 사용하여 생성자에서 불변 필드 변수를 초기화하기위한 것 입니다.
private
: 외부 클래스를 볼 수 있습니다.static
: 그것은 어떤 동작 독립적 수행 1 호스트 클래스의 상태.다소 고안된 예는 다음과 같습니다.
예 :
public class MyClass{
private final String concatenated;
public MyClass(String a, String b){
concatenated = concat(a,b);
}
public String getConcatenated(){
return concatenated;
}
/**
* Concatenates two Strings as `s1---s2`
**/
private static final String concat(String s1, String s2){
return String.format("%s---%s", s1, s2);
}
}
1 다른 static
변수 와 상호 작용이 없다고 가정합니다 .
super(...)
호출은 클래스 '생성자의 첫 번째 줄 수 있어야합니다, 그래서 당신은 당신이 슈퍼 호출에 전달하기 위해 무엇을 작업 할 수 있도록 로컬 변수를 선언 할 수 없습니다. 그러나 (비공개) 정적 메소드를 호출 할 수 있습니다.이 메소드는 수퍼 생성자에 전달할 값을 계산하는 데 필요한만큼 많은 행을 사용합니다.
많은 메소드에서 반복되는 몇 줄의 코드가 있음을 알 수 있으므로 중복 코드가 좋지 않기 때문에 단일 메소드로 추출하기로 결정했습니다.
광범위하게 사용하도록 설계되지 않았기 때문에 메소드를 비공개로 설정하고 관련없는 코드를 호출하는 것을 원하지 않습니다. (의견에서이 점을 토론하십시오….)
이 메소드는 인스턴스 필드에 액세스하지 않으므로 정적으로 만들 수 있습니다. 정적으로 만들면 이해하기 쉽고 조금 더 빠를 수 있습니다.
그러면 .... (아마도, 나중에는, 어쩌면 결코)
일단 메소드가 정적으로 만들어지면, 클래스에서 다른 클래스로 이동할 수 있음 이 분명 합니다.
또한 매개 변수 중 하나의 인스턴스 메소드로 쉽게 변환 할 수 있습니다. 종종 코드가 있어야하는 위치입니다.
일반적으로 개인 정적 메소드를 작성하는 것을 발견하면 별도로 모델링 해야하는 것이 있음을 나타냅니다.
그것들은 특정 객체 인스턴스의 상태에 묶여 있지 않기 때문에 public 및 private 정적 메소드 모음은 자체 의미 및 비 정적 메소드로 완전히 별도의 클래스를 형성 할 수 있습니다.
(또 다른 팁은 모든 유형의 공통 매개 변수가있는 정적 메소드 (공개 및 개인)가 많으면 해당 유형의 멤버로 더 나을 수 있다는 것입니다.)
따라서 귀하의 질문에 대답하기 위해 클래스가 해당 클래스의 인스턴스와 독립적 인 관련 메소드 그룹을 제공하면 개인 정적 메소드가 나타납니다. (... 그리고 그들은 독립적이기 때문에 자신의 수업에서 더 나을 수 있습니다.)
내가 생각할 수있는 매우 간단한 예는 주 함수에 전달되는 입력 인수 (또는 조작)에 대한 처리를 수행하려는 경우입니다. 따라서이 경우 처리가 크고 동일한 기능을 다른 곳에서 사용하지 않으면 개인 기능을 갖는 것이 합리적입니다. 메인이 정적이므로 다른 곳에서 사용하거나 호출하지 않기 때문입니다.