공부를 하다 문득 main문에 대해 궁금해졌다. 사실 이제서야 이런 의문을 가지고 찾아본게 부끄럽다. 반성하겠다.
지금까지 코딩을 하면서도 그냥 생각없이 코드를 작성하기에 급급했는데, 이제는 조금 더 여유를 가지고 궁금증이 생기는 것들에 대해 탐구하고 정리해보려 한다.
갖게된 의문점은 아래와 같다.
- 왜 main문 안에다가 실행 코드들을 작성해야 하지?
- main의 매개변수 (String[] args) 는 뭘 의미하는거지
- 1번의 이유가 2번이랑 연관이 있나?
1. 왜 main 메소드를 사용하는 것인가?
자바에서 main 메소드는 프로그램 실행의 시작점(entry point) 역할을 한다. 즉, 프로그램이 실행되면 JVM(Java Virtual Machine)이 가장 먼저 호출하는 메소드가 main.
예를 들어,
public class Example {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
여기서 프로그램을 실행하면 JVM은
- 먼저 Example 클래스를 찾고
- 이 클래스 내부에 있는 main 메소드를 호출해서 실행을 시작.
즉, 프로그램의 첫 번째 코드가 실행되는 지점이 main 메소드
2. main 의 매개변수 (String[] args) 의 의미?
프로그램 실행 시 전달되는 명령줄 인수(Command Line Arguments) 를 저장하는 배열
이는 사실 Intellij 나, 다른 IDE에서 프로그램을 실행시킬 때는 해당되지 않는다. (설정을 하면 변경 가능하긴 함)
예를 들어,
public class Example {
public static void main(String[] args) {
System.out.println("Number of arguments: " + args.length);
for(int i=0; i<args.length; i++) {
System.out.println("Argument " + i + ": " + args[i]);
}
}
}
위 코드에서 명령줄 인수를 확인하려면, 아래와 같이 터미널에서 java 프로그램을 실행시켜야 한다.
java Example Hello World 123
- 결과
Number of arguments: 3
Argument 0: Hello
Argument 1: World
Argument 2: 123
명령줄에서 Hello, World, 123을 입력했기 때문에 args 배열에는 {"Hello", "World", "123"} 이 저장
따라서, IntelliJ에서 실행시킬 때는 String[] args 배열에 아무것도 없는 상태로 실행된다.
그럼 왜 사용하는 걸까?
-> 프로그램이 실행될 때 외부에서 초기값, 파일명, 설정값 같은 정보를 전달해줄 수 있다.
java Example input.txt output.txt
public class Example {
public static void main(String[] args) {
String inputFile = args[0]; // input.txt
String outputFile = args[1]; // output.txt
System.out.println("입력 파일: " + inputFile);
System.out.println("출력 파일: " + outputFile);
}
}
위와 같이 입력값을 바꿀 수 있다.
결론
자바 프로그램의 모든 코드가 main 메소드 중심으로 실행되는 이유는
자바의 설계상 프로그램 시작점이 main 메소드로 정해져 있기 때문,
String[] args는 프로그램이 시작될 때 외부 데이터를 받기 위함.
'JAVA' 카테고리의 다른 글
| [Java] JUnit 테스트 코드 메서드 정리 (0) | 2025.03.20 |
|---|---|
| [Java] ConcurrentHashMap 정리 (0) | 2025.03.19 |
| [Java] Stream API (0) | 2025.01.08 |
| [Java] 컬렉션 프레임워크 (1) | 2025.01.08 |
| [JAVA] 스트림(stream) 정리 (0) | 2024.09.19 |