본문 바로가기
Baeldung번역&공부/Java-basic

Java main() Method Explained

by ms727 2025. 2. 3.

원본 글: https://www.baeldung.com/java-main-method

모든 프로그램이 실행될 때에는 실행될 장소가 필요합니다.
Java에서는 main()함수가 이를 담당합니다.
main() 함수를 코드에 작성하지만 이에 대한 상세내용은 알고있지 않습니다.
해당 글에서는 main()가 무엇인지, 또 다르게 작성할 수 있는 작성법에 대해 이야기합니다.

1. Common signature

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

보통 이런 형식으로 main() 함수를 작성합니다.
IDE에서 자동으로 작성해줍니다. 이 방법뿐만 아니라 다른 방법으로 main() 함수를 작성할 수도 있습니다만 다른 사람들은 그렇게 크게 신경 쓰지 않습니다.
이를 설명하기 전에, 위 구문에서 쓰이는 단어들이 어떤 것을 의마히는지 확인해보겠습니다.

  • public: 접근지시자(access modifier)라고 하며, 모든곳에서 접근이 가능합니다.
  • static: 이 구문을 통해서 클래스를 인스턴스화하지 않아도 해당 함수를 사용할 수 있게합니다.
  • void: main함수는 어떤 값도 리턴하지 않는다는 것을 의미합니다.
  • main: 함수의 이름입니다. JVM이 이를 보고 java program을 실행하게하는 식별자 역할을 합니다.

args 파라미터는 프로그램이 실행될 떄 사용자가 넘겨주는 인자값입니다. 이 파라미터는 String객체의 array형태이며 밑의 값처럼 넘겨줄 수 있습니다.

java CommonMainMethodSignature foo bar

위 코드를 통해서 CommonMainMethodSignature 라는 Java program을 실행하고, foo와 bar라는 두 개의 인자값을 넘겨줍니다.
해당 값들은 args[0], args[1]로 코드내에 직접 접근가능합니다.

public static void main(String[] args) {
    if (args.length > 0) {
        if (args[0].equals("test")) {
            // load test parameters
        } else if (args[0].equals("production")) {
            // load production parameters
        }
    }
}

이런 식으로 인자로 값을 넘겨, 테스트환경인지 운영환경인지에 대한 설정을 다르게 할 수 있습니다.

2. Different Ways to Write a main() Method

위 방식과 드리고 main() 함수를 작성하는 법을 알아보겠습니다.

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

"[]"위치에 따라 다른 방법들로 선언이 가능합니다.

또한 가변인수형태로 넘겨줄 수도 있습니다.

public static void main(String...args) { }

또한, strictfp라는 키워드를 통해서 main() 함수를 선언할 수 있습니다. 이는 부동소수점 계산을 프로세스간에 일관되게 수행되도록 강제하는 키워드입니다.

public strictfp static void main(String[] args) { }

추가설명: CPU에 따라 부동수소점 계산이 다르기에 이를 맞춰줄 상황이 필요할 수 있습니다. 이때 사용됩니다.

synchronizedfinal 키워드를 main 함수에 정의에 적용할 수 있지만 효과는 없습니다.
다만, final키워드 경우에는 args 인자에 적용하여 값이 수정되는 것을 방지할 수 있습니다.
위의 모든 키워드를 적용하여 선언도 가능합니다.

final static synchronized strictfp void main(final String[] args) { }//실제로 이렇게 쓸 경우는 없을 듯
public static void main(final String[] args) { }

3. Having More Than One main() Methods

애플리케이션내에 두 개의 main 함수를 선언할 수 있습니다.

비록 Junit과 같은 테스트 프레임워크를 사용하는게 적합하지만, 사람들은 때때로 이 방식을 통해서 개별 클래스 테스트 환경을 작성하였습니다.

JVM이 애플리케이션의 진입점을 결정할 때, 실행할 main 메서드를 명시해야 하는데 이를 MANIFEST.MF 파일에서 가지고 있습니다.
그렇기에 이 파일을 수정하여 main 클래스를 변경하여 진입점을 변경시킬 수 있습니다.

Main-Class: mypackage.ClassWithMainMethod

이 설정은 주로 실행 가능한 .jar 파일을 만들 때 사용되며,
진입점이 될 클래스를 지정하는 정보는 META-INF/MANIFEST.MF 파일(UTF-8 인코딩) 에 포함됩니다.

4. 결론

이 글을 통해서 main함수의 대한 동작원리를 알 수 있었고, 선호되지 않지만다른형태로 선언하는 방법도 학습하였습니다.
여러 구문으로 선언하는 방법을 배웠지만 이는 학습용으로 실제 우리는 공통된 구문으로 사용하는것이 추천됩니다.