Development Tip

클래스에서 정적 메서드를 언제 사용해야하며 이점은 무엇입니까?

yourdevel 2020. 11. 27. 21:30
반응형

클래스에서 정적 메서드를 언제 사용해야하며 이점은 무엇입니까?


정적 변수에 대한 개념이 있지만 클래스에서 정적 메서드의 이점은 무엇입니까? 일부 프로젝트에서 작업했지만 메서드를 정적으로 만들지 않았습니다. 클래스의 메서드를 호출해야 할 때마다 해당 클래스의 객체를 만들고 원하는 메서드를 호출합니다.

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 .


PHP의 정적 메서드 :

클래스 객체를 생성하지 않고 호출 할 수 있습니다.

정적 메서드 및 함수 만 호출 할 수 있습니다.


정적 변수는 클래스의 다른 객체간에 정보를 공유하고자 할 때 사용되며, 변수가 공유됨에 따라 각 객체는이를 업데이트 할 수 있으며 다른 모든 객체에도 업데이트 된 값을 사용할 수 있습니다. 정적 변수를 공유 할 수 있으므로 종종 클래스 변수라고합니다.


정적 요소는 모든 컨텍스트 (즉, 스크립트의 모든 위치)에서 액세스 할 수 있으므로 객체에서 객체로 클래스의 인스턴스를 전달할 필요없이 이러한 메서드에 액세스 할 수 있습니다.

정적 요소는 클래스의 모든 인스턴스에서 사용할 수 있으므로 유형의 모든 멤버가 사용할 수있는 값을 설정할 수 있습니다.

링크 를 더 읽으 려면 !

참고 URL : https://stackoverflow.com/questions/2080150/when-should-i-use-static-methods-in-a-class-and-what-are-the-benefits

반응형