클래스에서 정적 메서드를 언제 사용해야하며 이점은 무엇입니까?
정적 변수에 대한 개념이 있지만 클래스에서 정적 메서드의 이점은 무엇입니까? 일부 프로젝트에서 작업했지만 메서드를 정적으로 만들지 않았습니다. 클래스의 메서드를 호출해야 할 때마다 해당 클래스의 객체를 만들고 원하는 메서드를 호출합니다.
Q : 메서드의 정적 변수는 메서드가 실행 되어도 값을 유지하지만 포함하는 메서드에서만 액세스 할 수 있지만 정적 메서드의 가장 좋은 정의는 무엇입니까?
Q : 해당 클래스의 객체를 생성하지 않고 정적 메서드를 호출하는 것이 정적 메서드의 유일한 이점입니까?
Q : 정적 메서드의 액세스 가능 범위는 무엇입니까?
감사
정적 변수에 대한 설명은 C에있는 설명에 더 적합합니다. 객체 지향 용어에서 정적 변수의 개념은 개념적으로 다릅니다. 저는 여기에서 Java 경험을 바탕으로하고 있습니다. 정적 메서드와 필드는 개념적으로 무언가의 인스턴스에 속하지 않을 때 유용합니다.
Pi 또는 e와 같은 몇 가지 일반적인 값과 sin 및 cos와 같은 유용한 함수를 포함하는 Math 클래스를 고려하십시오. 이러한 종류의 기능을 사용하기 위해 별도의 인스턴스를 만드는 것은 실제로 의미가 없으므로 정적으로 더 좋습니다.
// This makes little sense
Math m = new Math();
float answer = m.sin(45);
// This would make more sense
float answer = Math.sin(45);
OO 언어에서 (다시 말하지만, Java 관점에서) 함수 또는 더 잘 알려진 메서드는 정적 지역 변수를 가질 수 없습니다. 클래스 만이 정적 멤버를 가질 수 있는데, 내가 말했듯이 C의 정적 개념과 거의 비슷하지 않습니다.
정적 메서드는 개체에 "this"포인터를 전달하지 않으므로 비 정적 변수 또는 메서드를 참조 할 수 없지만 결과적으로 런타임에 더 효율적일 수 있습니다 (개체를 만들고 파괴하는 데 필요한 매개 변수가 적고 오버 헤드가 없음).
응집성있는 메서드를 단일 클래스로 그룹화하거나 팩토리 패턴과 같이 해당 클래스의 객체에 대해 작동하는 데 사용할 수 있습니다.
정적 메서드에 대한 구문 (php) :
<?php
class Number {
public static function multiply($a, $b) {
return $a * $b;
}
}
?>
클라이언트 코드 :
echo Number::multiply(1, 2);
다음보다 더 의미가 있습니다.
$number = new Number();
echo $number->multiply(1, 2);
이 multiply()
메서드는 클래스 변수를 사용하지 않으므로의 인스턴스가 필요하지 않습니다 Number
.
기본적으로 정적 메서드를 사용하면 객체 지향 언어로 절차 코드를 작성할 수 있습니다. 객체를 먼저 만들지 않고도 메서드를 호출 할 수 있습니다.
클래스에서 정적 메서드를 사용하려는 유일한 경우는 지정된 메서드가 클래스 인스턴스를 만들 필요가 없을 때입니다. 이는 공유 데이터 소스 (예 : Singleton)를 반환하려고하거나 객체의 내부 상태를 수정하지 않는 작업 (예 : String.format)을 수행 할 때 발생할 수 있습니다.
이 wikipedia 항목은 정적 메소드를 매우 잘 설명합니다. http://en.wikipedia.org/wiki/Method_(computer_science)#Static_methods
정적 변수와 정적 메서드는 클래스의 인스턴스가 아니라 클래스에 바인딩됩니다.
정적 메소드는 "상태"를 포함하지 않아야합니다. 상태와 관련된 모든 것은 클래스가 아닌 인스턴스화 된 객체에 바인딩되어야합니다.
정적 메서드의 일반적인 사용법 중 하나는 명명 된 생성자 관용구입니다. 참조 : http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.8 .
클래스 객체를 생성하지 않고 호출 할 수 있습니다.
정적 메서드 및 함수 만 호출 할 수 있습니다.
정적 변수는 클래스의 다른 객체간에 정보를 공유하고자 할 때 사용되며, 변수가 공유됨에 따라 각 객체는이를 업데이트 할 수 있으며 다른 모든 객체에도 업데이트 된 값을 사용할 수 있습니다. 정적 변수를 공유 할 수 있으므로 종종 클래스 변수라고합니다.
정적 요소는 모든 컨텍스트 (즉, 스크립트의 모든 위치)에서 액세스 할 수 있으므로 객체에서 객체로 클래스의 인스턴스를 전달할 필요없이 이러한 메서드에 액세스 할 수 있습니다.
정적 요소는 클래스의 모든 인스턴스에서 사용할 수 있으므로 유형의 모든 멤버가 사용할 수있는 값을 설정할 수 있습니다.
'Development Tip' 카테고리의 다른 글
CSS 파일의 브라우저 캐싱 (0) | 2020.11.27 |
---|---|
XElement의 자식 (0) | 2020.11.27 |
실행중인 Amazon ec2 인스턴스를 예약하는 방법은 무엇입니까? (0) | 2020.11.27 |
Scala Functor와 Monad 차이점 (0) | 2020.11.27 |
Git에서 분기의 해시를 찾는 방법은 무엇입니까? (0) | 2020.11.27 |