본문 바로가기

[Java] main 메소드: public static void main(String[] args) 핵심 정리

IT by Sense. 2025. 6. 2.

목차

    자바를 처음 배우시는 분들이라면, 마치 마법의 주문처럼 등장하는 public static void main(String[] args) 구문을 만나게 됩니다. 이 코드는 대체 무엇을 의미하며, 왜 모든 자바 애플리케이션의 시작점에 등장하는 걸까요? 오늘은 자바 프로그램의 심장과도 같은 main 메소드에 대해 쉽고 명쾌하게 파헤쳐 보겠습니다!

    1. 자바 프로그램의 첫걸음, main 메소드란?

    모든 건물에 정문이 있듯이, 모든 자바 애플리케이션에는 실행을 시작하는 진입점(Entry Point)이 필요합니다. main 메소드가 바로 그 역할을 합니다. 우리가 자바 프로그램을 실행하면, 자바 가상 머신(JVM)은 약속된 규칙에 따라 이 main 메소드를 가장 먼저 찾아서 실행시킵니다. 마치 "자, 이제부터 여기서 프로그램을 시작하자!"라고 외치는 것과 같죠.

    만약 main 메소드가 없다면, JVM은 어디서부터 프로그램을 시작해야 할지 알 수 없어 애플리케이션을 실행할 수 없습니다.

    2. public static void main(String[] args) 파헤치기

    이제 구문을 한 단어씩 자세히 살펴보겠습니다.

    2.1. public: 모두에게 열린 문

    • public접근 제어자(Access Modifier) 중 하나입니다.
    • 단어 뜻 그대로 '공개된'이라는 의미를 가지며, 어떤 클래스에서든 이 main 메소드에 접근할 수 있도록 허용합니다.
    • JVM이 프로그램 외부에서 main 메소드를 호출해야 하므로, 반드시 public으로 선언되어야 합니다.

    2.2. static: 객체 생성 없이 바로 실행!

    • static은 메소드나 변수를 정적(static)으로 만들어줍니다.
    • main 메소드가 static으로 선언되어 있기 때문에, JVM은 해당 클래스의 객체(인스턴스)를 생성하지 않고도 main 메소드를 바로 호출할 수 있습니다.
    • 프로그램이 시작되는 시점에는 아직 어떤 객체도 만들어지지 않았을 수 있으므로, static은 필수적입니다. ClassName.main() 형태로 직접 호출이 가능한 것이죠.

    2.3. void: 아무것도 돌려주지 않아요

    • void는 메소드가 아무런 값도 반환(return)하지 않는다는 것을 의미합니다.
    • main 메소드는 프로그램의 시작점이며, 프로그램의 실행 흐름을 제어하는 역할을 합니다. 일반적으로 main 메소드가 종료되면 프로그램 전체가 종료되므로, 특별히 어떤 값을 반환할 필요가 없습니다.
    • 만약 intString 같은 다른 타입이 온다면, 메소드 끝에서 해당 타입의 값을 return 해주어야 합니다.

    2.4. main: 약속된 이름

    • main은 JVM이 애플리케이션의 시작점으로 인식하는 약속된 메소드 이름입니다.
    • 이 이름을 다른 것(예: start, begin 등)으로 바꾸면 JVM은 시작점을 찾지 못해 오류를 발생시킵니다. 반드시 main이어야 합니다!

    2.5. String[] args: 프로그램 실행 시 전달되는 값들

    • String[] argsmain 메소드가 받을 수 있는 매개변수(parameter)입니다.
    • String[]은 문자열(String) 타입의 배열(array)을 의미하며, args는 이 배열의 이름을 나타냅니다. (이름은 args가 아니어도 되지만, 관례적으로 args를 많이 사용합니다.)
    • 프로그램을 커맨드 라인(command line)에서 실행할 때, 추가적인 정보(인자, arguments)를 프로그램에 전달할 수 있는데, 이 값들이 String 배열 형태로 args에 저장됩니다.

    3. String[] args 활용 예제: 명령행 인자 사용하기

    main 메소드의 String[] args는 주로 프로그램을 실행할 때 외부에서 값을 전달받아 프로그램의 동작을 다르게 하고 싶을 때 사용합니다.

    // 예제: HelloArgs.java
    public class HelloArgs {
        public static void main(String[] args) {
            if (args.length == 0) {
                System.out.println("안녕하세요! 전달된 이름이 없네요.");
            } else {
                System.out.println("안녕하세요, " + args[0] + "님!");
                if (args.length > 1) {
                    System.out.println("당신의 도시는 " + args[1] + "이군요!");
                }
            }
        }
    }
    

    위 코드를 컴파일하고 실행하는 방법은 다음과 같습니다.

    1. 컴파일:
      javac HelloArgs.java
    2. 실행 (인자 없이):
      java HelloArgs

      출력: 안녕하세요! 전달된 이름이 없네요.

    3. 실행 (인자 1개 전달):
      java HelloArgs 펭수

      출력: 안녕하세요, 펭수님!

    4. 실행 (인자 2개 전달):
      java HelloArgs 뽀로로 서울

      출력:

      안녕하세요, 뽀로로님!
      당신의 도시는 서울이군요!

    args[0]는 첫 번째 전달된 문자열, args[1]은 두 번째 전달된 문자열을 가리킵니다. args.length는 전달된 인자의 개수를 알려줍니다.

    마무리하며

    public static void main(String[] args)는 자바 프로그래밍의 가장 기본적인 약속이자 출발점입니다. 각 키워드가 가지는 의미를 이해하면, 왜 자바 프로그램이 이렇게 시작되는지 명확하게 알 수 있습니다.

    • 트위터 공유하기
    • 페이스북 공유하기
    • 카카오톡 공유하기