자바를 학습하며 지금까지 1000번은 작성해본 것 같은 메인 메서드에 대해 간단한 고찰을 해보려 한다.
왜 public 이어야 하는가?
메인 메서드의 접근제한자를 private
으로 변경하고 컴파일 해보니 컴파일에 성공했다.
private static void main(String[] args) {
System.out.println("Hello");
}
커맨드에서 실행을 시켜봤더니!!
오류: GodOfJava 클래스에서 기본 메소드를 찾을 수 없습니다. 다음 형식으로 기본 메소드를 정의하십시오.
public static void main(String[] args)
또는 JavaFX 애플리케이션 클래스는 javafx.application.Application을(를) 확장해야 합니다.
main() must be declared as public because as we know it is invoked by JVM whenever the program execution starts and JVM do not belong to our program package.
JVM은 우리가 작성한 소스코드 패키지에 포함되어있지 않기 때문에 패키지 외에서 접근하는 것과 같다.
따라서 어디서든 접근 가능하도록 public
으로 무조건 설정해야 한다는 것이다.
JVM이 메인 메서드에 접근하지 못하는 문제가 생기는 것이기 때문에 런타임 오류가 발생한다.
왜 반환 값이 없는가?
자바프로그램은 메인메서드에서 시작한 모든 스레드(데몬 스레드 제외)가 종료되면 종료된다.
따라서 메인 메서드가 값을 반환한는 것은 아무 의미도 없다.
반환 값을 int
로 변경하고 컴파일 해봤더니 컴파일엔 성공했다.
public static int main(String[] args) {
System.out.println("Hello");
return 1;
}
오류: 기본 메소드는 GodOfJava 클래스에서 void 유형의 값을 반환해야 합니다.
다음 형식으로 기본 메소드를 정의하십시오.
public static void main(String[] args)
하지만 런타임 오류가 발생한다.
스트링 타입 배열 매개변수는 왜 필수인가?
스트링 타입 배열 매개변수는 필수이다.
변수명은 마음대로 바꿔도 문제가 없지만 반드시 하나의 String타입 배열이 매개변수로 들어와야 한다.
형식이 맞지 않는 경우 컴파일타임 오류가 발생한다.
자바 바이트 코드를 실행시킬 때, 외부에서 이 args에 값을 넣어줄 수 있다.
근데 왜 필수로 필요한지는 잘 모르겠다. 해외 포스팅들을 보면 GUI 키워드가 언급되던데 나중에 좀 더 찾아봐야 할 것 같다.
public class Main {
public static void main(String ... args) throws IOException {
System.out.println(0x452);
}
}
오 이건 실행된다!
'의문과 실험' 카테고리의 다른 글
회원 테이블의 PK를 Long 타입에 매핑하는 이유 (0) | 2024.02.04 |
---|---|
제네릭은 왜 Lower Bounded를 지원하지 않을까? 와일드카드의 사용처는? (1) | 2024.01.09 |
Monitor와 Synchronized 동작 알아보기 (1) | 2024.01.01 |
상속 시, 오버라이딩된 메서드의 접근제어자는 왜 확장만을 허용할까 (0) | 2023.12.19 |
[Spring] 프로젝트에서 IO를 줄여 성능을 개선해보자 (0) | 2023.10.04 |