💡 자바의 정석을 공부하던 중 습관적으로 쓰고있는 public static void main(String[] args)
의 의미에 대해서 궁금해져서 정리하는 글입니다.
자바로 작성한 프로그램은 public static void main (String[] args)
메서드에서 시작한다.
public static void main (String[] args) {
...
}
🌟 static으로 선언하는 이유
- main 메서드는 모든 자바 프로그램의 시작점이다.
- main 메서드가 아닌 경우 클래스를 인스턴스화 해야한다.
- static을 사용하여 클래스의 인스턴스를 생성하지 않고 메서드를 호출할 수 있다.
main 메서드는 프로그램 어디에서나 접근이 가능해야하기 때문에 public
키워드를 사용한다.
main 메서드는 프로그램의 시작과 끝으로 이 메서드가 종료되면 프로그램이 종료된다. 따라서 반환된 객체에 대해 JVM이 아무 작업도 수행하지 않기 때문에 return 값의 의미가 없다.
main 메서드는 프로그램의 시작점으로, 프로그램이 실행되면 가장 먼저 호출되는 메서드이다. 프로그램이 실행 직후에는 어떠한 객체도 존재하지 않는다. 따라서 main 메서드에 static이 붙지않는다면, 런타임 시작 시점에 메서드를 실행할 객체가 없어서 메서드 실행이 불가능하다.
따라서 static을 사용하여 객체의 생성없이 메모리에 할당시켜 메서드를 호출 가능하도록한 것이다.
또한 static으로 선언하면 메모리에 항상 상주하도록 설정할 수 있기때문이다. 프로그램의 시작점이 GC에 의해 종료되는 것을 막아 프로그램이 죽는 것을 방지할 수 있다. (+Garbage Collector에 의해 메모리에서 정리되지 않음)
static | heap | |
---|---|---|
메모리 할당 기준 | 프로그램 실행되는 순간 | 연산이 실행되는 순간 |
메모리 정리 기준( Garbage Collector ) | 정리 대상 아님 | Garbage Collector 에 의해 정리 |
규칙이다.
args
는 String[] 배열의 변수로 다른 값으로 써도 되지만 통상적으로 args 사용힌다.
프로그램의 실행 순간에 외부의 값을 가져와서 프로그램 내 사용하고자 할 때 메모리에 저장할 공간을 미리 선언해 두는 역할을 한다.
https://www.javatpoint.com/why-main-method-is-always-static-in-java
https://mozi.tistory.com/553
https://programmingfbf7290.tistory.com/entry/%EC%99%9C-main%EB%A9%94%EC%86%8C%EB%93%9C%EB%8A%94-static%EC%9D%B8%EA%B0%80
psvm 내부에 String[] args를 쓰는 이유는 무엇인가요?
코테 풀때 저는 String[] test로 쓰기도 하는데.. 궁금합니다!