본문 바로가기

JAVA/자바의 신

2장 컴파일

소스 -> 컴파일러 -> 바이트 코드 -> 디스크 -> 바이트 코드 -> jvm -> 기계어 -> 운영체제

 

내가 작성한 코드가 컴퓨터가 이해할 수 있게 변경 == 컴파일

작성한코드.java ------컴파일  javac. -------> 작성한코드.class (바이너리 파일)

 

 

main 메소드의 메소드 이름 앞에는 어떤 예약어들이 들어가나요?

public static void main

접근제어자, 정적선언, 리턴타입, 메서드이름

 

static으로 선언되지 않으면, 클래스의 인스턴스를 생성해야만 메소드를 호출할 수 있습니다.

그러나 프로그램이 시작될 때는 아직 어떤 인스턴스도 존재하지 않기 때문에

인스턴스를 생성하지 않고도 호출할 수 있어야 합니다.

 

요약

  • 독립적 호출: static으로 선언된 메소드는 객체 생성 없이 클래스 이름으로 직접 호출할 수 있습니다.
  • 프로그램 시작 시점: JVM은 프로그램 시작 시 main 메소드를 호출해야 하므로, 인스턴스 없이 호출 가능한 static 메소드로 선언되어야 합니다.
  • 클래스 로드 시점: 클래스 로더가 클래스를 로드할 때 static 메소드를 메모리에 할당하기 때문에, JVM은 클래스 로딩 후 바로 main 메소드를 실행할 수 있습니다.

따라서 main 메소드에 static 키워드를 붙이는 것은 필수적이며, 이는 Java 프로그램이 올바르게 시작되고 실행되기 위해 필요한 조건입니다.

 

JVM이 클래스 로딩 시 바로 호출 가능

static 메소드와 변수는 클래스 로더가 클래스를 로드할 때 메모리에 할당됩니다. 따라서 static 메소드는 클래스의 인스턴스를 생성하지 않고도 호출할 수 있습니다. 이 때문에 main 메소드를 static으로 선언하여 JVM이 클래스 로드 후 바로 호출할 수 있게 하는 것입니다.

 

main 메소드의 매개변수?

String[] args

 

내가 만든 클래스에서 main()메소드가 없으면 java 명령어로 그 클래스를 수행할 수 있나요?

아니요.

모든 자바 클래스는 main() 메소드가 반드시 있어야 합니다.

안그러면 Exception in thread main java.lang.NoSuchMethodError: main 이 발생합니다.

 

 

 

 

main() 메소드가 없는 Java 클래스를 실행하려고 하면?

Java 런타임은 다음과 같은 에러를 발생시킵니다

 

devwonny@devwonnyui-MacBookAir practice % java Test
Error: Main method not found in class Test, please define the main method as:
   public static void main(String[] args)
or a JavaFX application class must extend javafx.application.Application
 
Error: Main method not found in class Test, please define the main method as:
   public static void main(String[] args)
or a JavaFX application class must extend javafx.application.Application

이 에러 메시지는 JVM(Java Virtual Machine)이 프로그램의 진입점(entry point)을 찾지 못했기 때문에 발생합니다.
JVM은 애플리케이션을 시작할 때 public static void main(String[] args) 시그니처를 가진 메소드를 찾아서 실행하려고 시도합니다.
이 메소드가 없으면 프로그램을 시작할 수 없기 때문에 위와 같은 에러가 발생합니다.

 

 

 

 

 

 

 

 

'JAVA > 자바의 신' 카테고리의 다른 글

14장 예외  (0) 2024.07.23
4장 변수  (0) 2024.07.22
3장 객체지향  (0) 2024.07.22
1장 프로그래밍이란 무엇인가?  (0) 2024.07.22