Java, static 메소드 요약하기
용어 정리
클래스의 멤버 메소드는 인스턴스 메소드, 클래스 메소드가 있다.
멤버 메소드 종류
- 인스턴스 메소드: static 키워드가 붙지 않은 멤버 메소드
- 클래스 메소드: static 키워드가 붙은 멤버 메소드
정적 메소드 장점과 활용
정적 메소드는 객체 생성 과정이 필요 없어서 메소드의 호출만으로 필요한 기능으로 수행이 필요할때 사용한다.
메소드 하나로 끝나는 유틸리티 메소드에 사용. 대표적으로 수학의 기능들을 담은 클래스이다. 수학은 인스턴스 변수 없이 값을 반환하는 것이 대부분으로 정적 메소드를 사용해서 만들면 좋다.
Static 멤버변수 접근 법
클래스를 통해 바로 접근할 수 있다. 권장되지 않지만 인스턴스를 통한 접근 또한 가능하다.
StaticData.java
package method1;
public class StaticData {
public static void staticCall() {
System.out.println("정적 메소드 호출 완료");
}
}
Main.java
package method1;
public class Main {
public static void main(String[] args) {
StaticData data = new StaticData();
System.out.println("클래스 접근으로 정적 메소드 호출");
StaticData.staticCall();
System.out.println("인스턴스 접근으로 정적 메소드 호출");
data.staticCall();
}
}
실행결과
클래스 접근으로 정적 메소드 호출
정적 메소드 호출 완료
인스턴스 접근으로 정적 메소드 호출
정적 메소드 호출 완료
인스턴스로 접근하는 것과 클래스로 접근한 것 모두 결과가 일치.
인스턴스를 통한 접근
data.staticCall();
정적 메소드를 인스턴스를 Dot(.) 접근하는 방식을 권장하지 않음.
인스턴스를 통해 접근하면 인스턴스 메소드로 오해할 수 있음.
무엇보다 인스턴스 영역에 한번 이동하고 다시 메소드 영역으로 이동되어 반환함
클래스를 통한 접근
StaticData.staticCall();
정적 메소드는 공용으로 모든 곳에서 호출이 가능하므로 클래스를 통한 접근을 권장.
static import
정적 메소드 사용 시 아래와 같이 자주 호출해야하는 경우 static import 기능을 사용 하기도함.
StaticData.staticCall();
StaticData.staticCall();
StaticData.staticCall();
StaticData.staticCall();
- 상단 전역에 static import 사용
import static static2.StaticData.staticCall;
- 클래스명을 생략한 정적 메소드 호출
staticCall();
staticCall();
staticCall();
staticCall();
자바 main()
자바 프로그램 실행 시 main() 메소드는 static 키워드가 붙어있고, 인스턴스 생성없이 실행한 것을 알 수 있다.
그래서 메인은 정적메소드로 인스턴스 메소드를 사용할 수 없었고, static 키워드를 붙인 메소드만 호출 가능했다.
package method1;
public class Main {
public static void main(String[] args) {
System.out.println("Hello ");
method();
}
public static void method() {
System.out.println("World");
}
}