public static void main(String[] args) – Java main method

소개

Java의 main 메서드는 일반적으로 Java 프로그래밍을 시작할 때 가장 먼저 배우는 메서드입니다. 왜냐하면 이것은 Java 프로그램을 실행하는 진입점이기 때문입니다. main 메서드에는 실행할 코드나 다른 메서드를 호출하는 코드가 포함될 수 있으며, 프로그램의 일부인 어떤 클래스에나 배치할 수 있습니다. 더 복잡한 프로그램은 일반적으로 main 메서드만 포함하는 클래스를 가지고 있습니다. main 메서드를 포함하는 클래스는 아무 이름이나 가질 수 있지만, 일반적으로 클래스를 Main으로만 지칭할 수 있습니다.

다음 예제에서 main 메서드를 포함하는 클래스는 Test로 지칭됩니다:

Test.java
public class Test {

	public static void main(String[] args){

		System.out.println("Hello, World!");
	
	}
}

이 문서에서는 main 메서드의 각 구성 요소에 대해 배우게 됩니다.

Java Main 메서드 구문

main 메서드의 구문은 항상 다음과 같습니다:

public static void main(String[] args){
	// 어떤 코드
}

String 배열 인수의 이름만 변경할 수 있습니다. 예를 들어, argsmyStringArgs로 변경할 수 있습니다. String 배열 인수는 String... args 또는 String args[]로 작성할 수 있습니다.

public

main 메서드의 액세스 수정자를 public으로 설정해야만 JRE가 이 메서드에 액세스하여 실행할 수 있습니다. 메서드가 공개되지 않으면 액세스가 제한됩니다. 다음 예제 코드에서 main 메서드는 public 액세스 수정자가 누락되어 있습니다.

Test.java
public class Test {

	static void main(String[] args){

		System.out.println("Hello, World!");
	
	}
}

프로그램을 컴파일하고 실행하면 다음과 같은 오류가 발생합니다. 왜냐하면 main 메서드가 공개되지 않았고 JRE가 그것을 찾을 수 없기 때문입니다:

  1. javac Test.java
  2. java Test
Output
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

static

Java 프로그램이 시작될 때 클래스의 객체가 없습니다. 따라서 JVM이 클래스를 메모리에 로드하고 클래스의 인스턴스를 먼저 만들지 않고도 main 메서드를 호출할 수 있어야 합니다. 다음 예제 코드에서 main 메서드에는 static 수정자가 누락되어 있습니다:

Test.java
public class Test {

	public void main(String[] args){

		System.out.println("Hello, World!");
	
	}
}

프로그램을 컴파일하고 실행하면 다음과 같은 오류가 발생합니다. 왜냐하면 main 메서드가 static이 아니기 때문입니다:

  1. javac Test.java
  2. java Test
Output
Error: Main method is not static in class Test, please define the `main` method as: public static void main(String[] args)

void

모든 자바 메소드는 반환 유형을 제공해야 합니다. 자바 main 메소드의 반환 유형은 void입니다. 왜냐하면 아무것도 반환하지 않기 때문입니다. main 메소드가 실행을 완료하면, 자바 프로그램이 종료되므로 반환된 객체가 필요하지 않습니다. 다음 예제 코드에서는 반환 유형이 void일 때 main 메소드가 무언가를 반환하려고 시도합니다:

Test.java
public class Test {

	public static void main(String[] args){
	
		return 0;
	}
}

프로그램을 컴파일하면, 반환 유형이 void일 때 반환 값을 예상하지 않기 때문에 다음과 같은 오류가 발생합니다:

  1. javac Test.java
Output
Test.java:5: error: incompatible types: unexpected return value return 0; ^ 1 error

main

자바 main 메소드는 항상 main이라는 이름으로 지정됩니다. 자바 프로그램이 시작되면 항상 main 메소드를 찾습니다. 다음 예제 코드는 main 메소드가 myMain으로 이름이 변경된 것을 보여줍니다:

Test.java
public class Test {

	public static void myMain(String[] args){

		System.out.println("Hello, World!");
	}
}

프로그램을 컴파일하고 실행하면, JRE가 클래스에서 main 메소드를 찾을 수 없어 다음과 같은 오류가 발생합니다:

  1. javac Test.java
  2. java Test
Output
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

String[] args

Java main 메서드는 String 배열 타입의 단일 인수를 허용합니다. 배열 내의 각 문자열은 명령 줄 인수입니다. 프로그램의 작동을 변경하거나 프로그램에 정보를 전달하기 위해 명령 줄 인수를 사용할 수 있습니다. 다음 예제 코드는 프로그램을 실행할 때 입력하는 명령 줄 인수를 출력하는 방법을 보여줍니다:

Test.java
public class Test {

	public static void main(String[] args){

    	for(String s : args){
		System.out.println(s);
    	}
	
    }
}

프로그램을 컴파일한 다음 몇 개의 명령 줄 인수로 구분된 상태에서 실행하면, 인수가 터미널에 출력됩니다:

  1. javac Test.java
  2. java Test 1 2 3 "Testing the main method"
Output
1 2 3 Testing the main method

결론

이 문서에서는 Java main 메서드의 각 구성 요소에 대해 배웠습니다. 더 많은 Java 튜토리얼을 통해 학습을 계속하세요.

Source:
https://www.digitalocean.com/community/tutorials/public-static-void-main-string-args-java-main-method