Java의 main 메소드는 왜 static 메소드일까?
학습목표
Java의 main 메소드 앞에는 왜 `static`키워드가 붙을까? JVM 작동원리하고 연관지어 알아보자
JVM←객체를 생성하지 않고도 프로그램 시작할 수 있어야
1. 프로그램 실행 과정으로 이해해보자
- 객체가 있어야 메소드 호출이 가능한데, 프로그램 시작 시점에는 어떤 객체도 없는 상태.
- JVM이 객체 생성 없이도 메서드를 호출할 수 있어야 함
- 따라서 static으로 선언하여 클래스 로딩 시점에 메모리에 로드되도록 함
2. 코드로 이해해보자
1) 프로그램 시작 시점의 상황
어떤 객체도 생성되어 있지 않은 상태
public class MyProgram {
public static void main(String[] args) {
}
}
2) 만약 main()이 static 메소드가 아니라면,
main 메소드를 호출하기 위해서는 MyProgram 객체가 필요함
그런데 누가 이 main 객체를 생성해야 하나?
JVM? 그러면 JVM이 생성자도 알아야 함
또, 만약 생성자에 파라미터가 필요하다면?
public class MyProgram {
public void main(String[] args) {
}
}
3) 따라서 static 메소드로 선언한다
main 메소드가 static 메소드가 되면
- 객체 생성 없이 호출 가능하고,
- 클래스 로딩 시점에 메모리에 로드된다.
- 또, JVM이 바로 호출할 수 있다.
public class MyProgram {
public static void main(String[] args) {
// 이제 여기서부터 필요한 객체들을 생성할 수 있음
MyProgram program = new MyProgram();
}
}
댓글남기기