자바의 모든 프로그램은 public static void main(String[] args) 메서드에서 시작됩니다. 이 메서드를 메인 메서드라고 하며, 자바 프로그램의 진입점(Entry Point) 역할을 합니다.
자바 프로그램이 실행될 때, JVM(Java Virtual Machine)은 프로그램의 시작점(Entry Point)을 찾습니다. 자바에서는 main 메서드가 그 역할을 하며, 프로그램의 실행이 시작되는 지점입니다.
JVM이 main 메서드를 찾지 못하면 프로그램이 실행되지 않으며, NoSuchMethodError: main 오류가 발생합니다. 따라서 자바 프로그램을 실행하려면 반드시 main 메서드가 필요합니다.
public static void main(String[] args) 구조 분석자바의 main 메서드는 다음과 같이 선언됩니다.
public static void main(String[] args) {
System.out.println("Hello, Java!");
}
publicpublic은 접근 제한자(access modifier)로, 해당 메서드가 모든 곳에서 접근할 수 있도록 합니다. main 메서드는 JVM이 호출해야 하므로 반드시 pulic으로 선언해야 합니다.
만약 private 또는 protected로 선언하면 JVM이 접근할 수 없어 프로그램 실행이 불가능해집니다.
| 접근 제한자 | 설명 |
|---|---|
public | 모든 곳에서 접근 가능 (다른 패키지에서도 접근 가능) |
protected | 같은 패키지 및 상속 관계에서 접근 가능 |
default (패키지 접근) | 같은 패키지 내에서만 접근 가능 (명시적으로 default 키워드는 없음) |
private | 해당 클래스 내부에서만 접근 가능 |
default 접근 제한자는 명시적으로 default라는 키워드를 쓰지 않고, 접근 제한자를 생략하면 적용됩니다.staticstatic 키워드는 해당 메서드가 객체를 생성하지 않고도 실행될 수 있도록 합니다.
자바에서 메서드를 호출하려면 원래 객체를 생성해야 하지만, main 메서드는 프로그램 실행과 동시에 호출되어야 합니다. 따라서 static으로 선언하여 JVM이 클래스의 인스턴스를 만들지 않고도 main 메서드를 직접 호출할 수 있도록 합니다.
또한 static 메서드는 Heap 영역이 아닌 메서드 영역(Method Area)에 로드되기 때문에 프로그램이 종료될 때까지 유지됩니다. 만약 static이 없다면 main 메서드가 메모리에서 제거될 수 있고, 프로그램이 정상적으로 실행되지 않습니다.
voidvoid는 메서드가 반환값을 가지지 않음을 의미합니다.
main 메서드는 프로그램의 시작점이며, 반환값이 필요하지 않습니다. 프로그램이 종료되면 JVM이 자동으로 프로세스를 종료하기 때문에, main 메서드가 반환값을 가질 필요가 없습니다.
main메서드의 이름입니다. JVM이 프로그램 실행 시 main 이라는 이름의 메서드를 찾기 때문에 반드시 main으로 지정해야 합니다. 다른 이름을 사용하면 프로그램이 실행되지 않습니다.
String[] argsargs는 프로그램 실행 시 전달할 수 있는 문자열 배열입니다.
자바에서 String[] args는 항상 빈 배열로 초기화됩니다.
args는 명령줄에서 입력된 값을 문자열 배열로 저장하는 역할을 합니다.String[] args를 전달합니다.args.length == 0인 빈 배열이 들어갑니다 (null 아님).String[] args: 명령줄 인자 활용법 & IDE 실행 방식자바가 처음 등장했을 때는 IDE가 없었기 때문에, 개발자들은 터미널(명령 프롬프트)에서 직접 명령어를 작성하여 자바 프로그램을 실행했습니다. 이를 위해 String[] args가 사용되었습니다.
JVM이 Test.class를 로드하고 해당 클래스의 main 메서드를 실행:
java Test
args는 빈 배열입니다 (new String[]).args 배열에 "hello", "world"가 저장됩니다.
띄어쓰기를 기준으로 각 단어를 구분하여 args 배열에 저장합니다. 띄어쓰기가 명령줄 인자를 나누는 역할을 합니다.
java Test hello world
args[0] = "hello"args[1] = "world"명령줄 인자가 필요한 이유는 프로그램 실행 시, 외부에서 값을 전달해서 프로그램을 동적으로 실행하기 위해서입니다.
public class SumCalculator {
public static void main(String[] args) {
if (args.length < 2) {
System.out.println("숫자 두 개를 입력하세요!");
return;
}
// 명령줄에서 입력한 문자열을 정수로 변환
int num1 = Integer.parseInt(args[0]);
int num2 = Integer.parseInt(args[1]);
System.out.println("두 수의 합: " + (num1 + num2));
}
}
java SumCalculator 10 20
두 수의 합: 30
java Test "hello World"args 배열의 값:args[0] = "hello world;현재는 IntelliJ, Eclipse, VSCode와 같은 IDE에서 실행하는 경우가 많기 때문에, 명령줄에서 직접 실행하는 방식과는 차이가 있습니다.
즉, IDE에서는 터미널에서 직접 java Test hello world 같이 입력하는 대신, Run 버튼을 눌러 실행하는 형태입니다.
java Test 명령을 실행args 값이 제공되지 않음Test.class가 JVM의 메서드 영역(Method Area)에 적재됨main(String[] args) 메서드가 호출됨args.length == 0인 빈 배열이 전달됨args[] 배열에 들어감System.out.println() 같은 출력문이 있으면 IDE의 콘솔(결과 창)에 결과가 표시됨args[])를 설정하는 방법 (IntelliJ IDEA)IDE에서는 기본적으로 명령줄 인자를 직접 설정해야 args에 값이 들어갑니다.
명령줄 인자를 설정하면 내부적으로 java Test hello world와 같은 명령이 실행되는 것과 동일한 효과를 얻게 됩니다.
IDE에서 명령줄 인자를 설정하면, 실제 터미널에서 실행하는 것처럼 동작합니다.

hello world 입력

args[]에 "hello"와 "world"가 저장됩니다.Test.java 코드를 작성합니다.
public class Test {
public static void main(String[] args) {
System.out.println("명령줄 인자 개수: " + args.length);
for (int i = 0; i < args.length; i++) {
System.out.println("args[" + i + "] = " + args[i]);
}
}
}
Program Arguments: hello world 입력 후 실행
명령줄 인자 개수: 2
args[0] = hello
args[1] = world

IDE에서 명령줄 인자를 설정하지 않으면 args[]가 빈 배열이 됩니다.
명령줄 인자 개수: 0

String[] args를 계속 유지하는 이유지금은 대부분의 개발자가 IDE에서 Run 버튼을 눌러 프로그램을 실행합니다.
이 경우, 명령줄 인자를 직접 입력할 필요가 없으며, args 배열은 기본적으로 빈 배열(new String[0])로 초기화됩니다.
따라서 IDE 환경만 고려한다면 String[] args 없이도 프로그램 실행에는 문제가 없습니다.
이렇게 보면 String[] args는 현재 환경에서는 큰 의미가 없는 것처럼 보일 수 있습니다.
그러나 자바는 다양한 실행 환경에서 동작해야 하며, 과거의 실행 방식과의 호환성을 유지하면서도 명령줄 인자를 활용해야 하는 경우가 여전히 존재합니다.
이러한 이유로 String[] args 구조는 지금도 유지되고 있습니다.
초기에는 터미널에서 직접 명령어를 입력하여 실행했기 때문에 String[] args 구조가 필수적이었습니다.
현재도 CLI(Command Line Interface) 환경(터미널, 명령 프롬프트)에서 실행하는 프로그램이 많기 때문에 그대로 유지되고 있습니다.
예를 들어, 다음과 같이 실행하면 args 배열에 값이 저장됩니다.
java Test hello world
args[0] = "hello"
args[1] = "world"
String[] args는 CLI(Command Line Interface) 프로그램에서 외부 입력을 받을 때 매우 유용합니다.
예를 들어, Git과 같은 CLI 도구도 명령줄 인자를 사용합니다.
git commit -m "first commit"
테스트할 때 실행할 환경에 따라 외부 값을 변경해야 하는 경우 args가 유용합니다.
예를 들어, 실행할 때마다 다른 설정 값을 넣어서 프로그램을 실행할 수 있습니다.
java ConfigLoader config1.json
args[0] = "config1.json"
config1.json이라는 설정 파일을 args[0]에 전달하여 동적으로 설정을 변경할 수 있도록 하는 것입니다.config1.json을 읽어 해당 설정을 적용합니다.args를 활용하는 것입니다.자바는 JVM(Java Virtual Machine)의 표준 실행 방식을 유지해야 합니다.
String[] args를 유지함으로써 모든 자바 프로그램이 일관된 진입점(entry point)을 가지게 됩니다.
즉, 실행 환경이 다르더라도 JVM이 동일한 방식으로 프로그램을 실행할 수 있도록 보장하는 역할을 합니다.
String[] args가 필수적이었습니다.