자바 메인 메소드

자바 메인 메소드 public static void main(String[] args) 는 자바를 처음 배울 때, 가장 먼저 접하는 메소드다. 자바 메인 메소드는 자바 프로그램의 진입점으로 항상 public static void main(String[] args) 의 형태로 작성된다. 개발자는 매개변수 명만 변경할 수 있고 나머지는 항상 정해진 되로 작성해야 한다.

public class Test {
    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}

public

메인 메소드의 접근 제어자는 pulic이다. 무조건 pulic이어야 자바 런타임에서 메인 메소드를 호출할 수 있다. 다른 접근 제어자를 사용하면 프로그램이 실행되지 않는다.

public class Test {
    static void main(String[] args) {
        System.out.println("Hello World");
    }
}
오류: io.ohjongsung.algorithm.collections.Test 클래스에서 기본 메소드를 찾을 수 없습니다. 
다음 형식으로 기본 메소드를 정의하십시오.
   public static void main(String[] args)
또는 JavaFX 애플리케이션 클래스는 javafx.application.Application을(를) 확장해야 합니다.

static

자바 런타임이 처음 시작하면, 클래스 인스턴스가 존재하지 않는다. 이 상황에서 메인 메소드를 실행하기 위해서는 static 키워드가 필수다. JVM에서 클래스 로드가 일어날 때, static 메소드인 메인 메소드를 로드하고 호출할 수 있게 된다.

public class Test {
    public void main(String[] args) {
        System.out.println("Hello World");
    }
}
오류: io.ohjongsung.algorithm.collections.Test 클래스에서 기본 메소드가 static이(가) 아닙니다. 
다음 형식으로 기본 메소드를 정의하십시오.
   public static void main(String[] args)

void

자바의 모든 메소드 시그니처에는 리턴 타입을 정의하도록 되어있다. 리턴 타입이 필요없는 경우는 void 키워드로 리턴하는 것이 없다고 정의한다. 자바 메인 메소드는 리턴 값이 없다. 메인 메소드의 실행이 끝난다는 것은 자바 프로그램의 종료를 의미하기 때문에 리턴 값이 있을 필요가 없기 때문이다. 메인 메소드에서 무엇인가를 반환하려고 하면 컴파일 오류가 발생한다.

public class Test {
    public void main(String[] args) {
        System.out.println("Hello World");
        return 0;
    }
}
Error:(12, 16) java: incompatible types: unexpected return value
      return 0;
	     ^

main

자마 메인 메소드명은 main이다. 자바 프로그램이 시작될 때, main 메소드를 찾는다. 이는 정해진 규약이기 때문에 메인 메소드 명을 변경하면 프로그램을 시작할 수 없다.

public class Test {
    public static void mainTest(String[] args) {
        System.out.println("Hello World");
    }
}
오류: io.ohjongsung.algorithm.collections.Test 클래스에서 기본 메소드를 찾을 수 없습니다. 
다음 형식으로 기본 메소드를 정의하십시오.
   public static void main(String[] args)
또는 JavaFX 애플리케이션 클래스는 javafx.application.Application을(를) 확장해야 합니다.

String[] args

자바 메인 메소드는 String 배열의 인자를 받는다. 자바 커맨드 라인이나 IDE를 통해 전달할 수 있다.

public class Test {
    public static void main(String[] args) {
        for(String s : args){
            System.out.println(s);
        }
    }
}
$ javac Test.java 
$ java Test 1 2 3
1
2
3