자바에서 메인 함수(Main Function)는 자바 프로그램의 시작 지점을 의미합니다. 자바 프로그램을 실행하면 가장 먼저 호출되는 함수가 바로 main() 함수입니다.
아래는 자바의 기본적인 메인 함수 선언입니다:
public static void main(String[] args) {
// 프로그램의 시작 지점
}
코드를 구성하는 각 키워드와 의미 설명
🔍 1. public
- 접근 제어자입니다.
- public으로 지정하면 어디서든 접근 가능하다는 의미입니다.
- 자바 프로그램을 실행하는 자바 런타임(JVM)은 외부에서 이 main() 함수를 호출하기 때문에 반드시 public이어야 합니다.
→ private이나 protected, 아무것도 안 쓰면 실행되지 않음.
🔍 2. static
- static은 클래스 로딩 시 함께 메모리에 올라가는 키워드입니다.
- 객체를 생성하지 않고도 사용할 수 있게 합니다.
- 자바 프로그램이 시작할 때 아직 main() 함수가 포함된 클래스의 객체가 만들어지지 않았기 때문에, 객체 없이 바로 실행 가능하게 하기 위해 static이 필요합니다.
🔍 3. void
- 반환값이 없음을 나타냅니다.
- main() 함수는 프로그램을 시작할 뿐, JVM에게 어떤 값을 반환하지 않기 때문에 void를 사용합니다.
🔍 4. main
- 자바에서 정해진 프로그램의 시작 이름입니다.
- 이름이 반드시 main이어야 합니다.
다른 이름으로 바꾸면 자바 프로그램의 진입점이 없어 오류 발생합니다.
🔍 5. String[] args
- 커맨드라인(명령줄)에서 전달되는 **인자(argument)**를 배열로 받습니다.
- 예: java MyClass Hello World라고 실행하면
→ args[0] = "Hello"
→ args[1] = "World"
이걸 통해 외부에서 입력값을 받을 수 있습니다.
✅ 예제: 메인 함수와 명령줄 인자 사용
public class HelloWorld {
public static void main(String[] args) {
System.out.println("프로그램 시작!");
if (args.length > 0) {
System.out.println("명령줄 인자:");
for (int i = 0; i < args.length; i++) {
System.out.println("args[" + i + "] = " + args[i]);
}
} else {
System.out.println("명령줄 인자가 없습니다.");
}
}
}
실행:
java HelloWorld Java OOP
출력:
프로그램 시작!
명령줄 인자:
args[0] = Java
args[1] = OOP
💡 정리: 메인 함수 구조 기억법
구성 요소 | 설명 |
public | 외부(JVM)에서 접근 가능하게 함 |
static | 객체 없이도 실행 가능하게 함 |
void | 반환값이 없음 |
main | 프로그램의 시작 지점 |
String[] args | 외부에서 입력되는 문자열 인자들 |
main()함수 프로젝트와 패키지 구조 속 진입점 관리
자바에서는 클래스마다 main() 함수를 여러 개 만들 수 있고,
패키지마다, 혹은 한 프로젝트 내 여러 클래스에 각각 main() 함수가 있어도 무방합니다.
하지만… 중요한 건 "어떤 main()을 실행할 것인지"는 JVM 실행 시 지정한 클래스 기준이라는 점.
✅ 예시: 여러 개의 main() 함수
// src/main/java/com/example/MainA.java
package com.example;
public class MainA {
public static void main(String[] args) {
System.out.println("MainA 실행");
}
}
// src/main/java/com/example/sub/MainB.java
package com.example.sub;
public class MainB {
public static void main(String[] args) {
System.out.println("MainB 실행");
}
}
실행:
- MainA 실행:
- java com.example.MainA
- MainB 실행:
- java com.example.sub.MainB
📌 단, 두 클래스를 동시에 JVM 하나에서 동시에 실행할 수는 없고,
어떤 클래스를 실행할지는 직접 지정해야 합니다.
✅ IDE에서는?
Eclipse, IntelliJ 같은 IDE에서는
각 main 함수가 있는 클래스에 대해 ‘Run’ 버튼이 따로 생깁니다.
→ 여러 개의 main()이 있어도 문제 없이 관리 가능!
✅ 그럼 왜 하나만 쓰는 경우가 많을까?
- 실제 프로덕션(서비스용 애플리케이션)에서는 하나의 진입점이 필요하기 때문입니다.
- 예를 들어:이럴 땐 META-INF/MANIFEST.MF에 명시된 Main-Class의 main() 함수가 실행됩니다.
- java -jar MyApp.jar
그래서 실무에서는 보통 하나의 main() 진입점을 중심으로 애플리케이션이 실행되지만,
테스트나 예제용으로는 여러 개의 main 함수가 공존 가능합니다.
✅ 정리
항목 | 설명 |
main() 함수 개수 | 클래스마다 각각 존재 가능 (무제한) |
실행 방식 | java 클래스명으로 지정 |
IDE 지원 | 각 main 함수별로 실행 가능 |
jar 파일 실행 | Main-Class에 지정된 하나만 실행됨 |
실무에서는 | 일반적으로 하나만 사용 (Entry Point) |
'Java' 카테고리의 다른 글
[Java] 객체(Object), 클래스(Class), 그리고 메서드(Method)와 속성(Property, 필드) (0) | 2025.03.26 |
---|---|
[Java] 정렬 알고리즘 (0) | 2025.03.25 |
Java / Python / JavaScript 형변환(type casting) 정리 (0) | 2025.03.23 |
Java vs Python vs JavaScript 문법 총정리 (0) | 2025.03.22 |
[Java] 기본 문법 정리 - 추가 (0) | 2025.03.19 |
댓글