2017-11-16 1 views
-3

때마다 클래스가 초기화되고 메서드가 정적 (new Class())이 아니거나이 클래스의 메서드가 정적이고 그 사용법이 Class.method() 인 경우 성능 차이는?Java - 정적 및 비 정적 성능 차이

예제 코드 :

//File Class1 
public class Class1{ 
    public static void myMethod(){ 
     System.out.println("Static method, usage: Class1.myMethod();") 
    } 
} 

//File Class2 
public class Class2{ 
    public void myNonStaticMethod(){ 
     System.out.println("Non static method, usage: Class2 class2 = new Class2(); class2.myNonStaticMethod();") 
    } 
} 

하나가 빨라집니다 무엇입니까? 정적 또는 클래스 초기화 메서드?

추신. 미안, 내가 실수를했다면. 영어가 제 주요 언어가 아닙니다. : P

+4

실제 문제는 없습니다. 하나를 선택하는 것은 효율성이 아니라 오히려 목적과 요구 사항입니다. – Stultuske

+0

퍼포먼스를 수행 할 때 어느 쪽을 더 사용 하시겠습니까? 어떤 경우에는 "super"가 필요하지 않으므로 정적 인 것이 빠르면 사용할 수 있지만 좋을까요? –

+0

어쨌든 호출 할 때마다 왜 'Class2'의 새로운 인스턴스를 만들고 싶습니까? 메소드는 해당 클래스의 인스턴스와 어떤 관련이 있습니까? 메서드를 재정의 할 수있게 하시겠습니까? – Thomas

답변

0

그것은 단지 당신이 달성하고자하는 것에 달려 있습니다. 메소드 나 변수를 정적으로 만드는 것은 부모 클래스의 인스턴스를 만들지 않고도 액세스 할 수 있기를 원하는 경우에 적합합니다. 예 :

체질량 지수를 계산할 수 있습니다. 그 클래스 안에서 킬로그램을 파운드로 변환하기위한 방법 x을 가질 수 있습니다. 이제 킬로그램을 파운드로 변환 할 수 있지만 체질량 지수를 계산하고 싶지는 않습니다. 이런 종류의 시나리오에서는 x이라는 새 인스턴스를 만들지 않고 해당 메서드를 정적으로 만들면 킬로그램을 파운드로 변환 할 수 있습니다.

그래서 성능에 관한 것이 아니라 사용법에 관한 것입니다.

+0

답변 해 주셔서 감사합니다! 그래서 API와 같은 것을 만들면 가장 좋은 방법은 정적 메소드를 만드는 것입니다. 그러나 PlayerData (예 : 위치, 이름과 같은 모든 플레이어 데이터를 포함)를 만들 때 클래스를 생성자 instad (예 : static)를 사용하여 다른 클래스에 public으로 내보내고 초기화 된 클래스를 내보내는 것이 좋습니다. 이 모든 데이터를 별도로 수집하는 해시 맵? –

+0

위치, 이름 등 모든 플레이어 데이터를 보유 할 수있는 'PlayerData'와 같은 것입니다. 네, 새로운 인스턴스를 만들어야합니다. 하지만 기본적으로 정적 메소드/변수는 인스턴스 변수와 같은 것에 의존하지 않을 때 사용됩니다 –

관련 문제