원본 글: 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에 따라 부동수소점 계산이 다르기에 이를 맞춰줄 상황이 필요할 수 있습니다. 이때 사용됩니다.
synchronized
와 final
키워드를 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함수의 대한 동작원리를 알 수 있었고, 선호되지 않지만다른형태로 선언하는 방법도 학습하였습니다.
여러 구문으로 선언하는 방법을 배웠지만 이는 학습용으로 실제 우리는 공통된 구문으로 사용하는것이 추천됩니다.
'Baeldung번역&공부 > Java-basic' 카테고리의 다른 글
Varargs란(Varargs in Java) (0) | 2025.02.08 |
---|---|
Pass-By-Value메커니즘 설명(Pass-By-Value as a Parameter Passing Mechanism in Java) (0) | 2025.02.08 |
문자열 잇는 방법(String Concatenation in Java) (0) | 2025.02.08 |
패키지에 대하여(Guide to Java Packages) (0) | 2025.02.04 |
자바 기초문법(Introduction to Basic Syntax in Java) (0) | 2025.01.31 |