Maximize Your Potential

BackEnd

C 언어와 Java에서의 main 함수의 자료형은 왜 다를까?

maxworld 2025. 1. 18. 14:00
728x90

프로그래밍 언어를 처음 배우다 보면 C 언어와 Java의 main 함수 형태가 서로 다른 것을 알게 됩니다. 특히 C에서는 int main(void)로 시작하고, Java에서는 public static void main(String[] args)로 작성됩니다. 두 언어의 철학과 실행 환경의 차이로 인해 이러한 차이가 발생합니다. 이번 글에서는 C와 Java에서 main 함수가 각각 어떤 의미를 가지는지, 왜 형태가 다른지 자세히 살펴보겠습니다.

 


C 언어에서 main 함수가 int인 이유

1. 프로그램의 종료 상태를 운영체제에 반환

C 언어는 시스템 프로그래밍 언어로, 프로그램이 운영체제에서 직접 실행됩니다. int main()의 반환값은 운영체제에 프로그램의 종료 상태를 전달하는 역할을 합니다.

  • return 0;: 프로그램이 정상적으로 종료되었음을 의미합니다.
  • return 값이 0이 아닌 경우: 비정상적인 종료를 나타냅니다.

운영체제는 이 반환값을 활용해 프로그램이 성공적으로 실행되었는지, 아니면 오류가 발생했는지 확인할 수 있습니다.

2. POSIX 및 C 표준

C 표준에 따르면 main 함수는 반드시 아래 형식 중 하나를 가져야 합니다:

  • int main(void)
  • int main(int argc, char *argv[])

이 규칙은 OS와의 호환성을 유지하기 위함입니다. 특히 argcargv는 명령줄 인수를 처리하는 데 사용됩니다.


Java에서 main 함수가 String[] args인 이유

1. JVM(Java Virtual Machine)의 관점

Java는 운영체제에서 직접 실행되지 않고, JVM 위에서 실행됩니다. JVM은 프로그램 시작 시 main 함수에 명령줄 인수를 전달합니다. 이를 위해 String[] args라는 배열을 사용합니다.

2. 입력 인수 처리

String[] args는 명령줄 인수를 받을 수 있도록 설계되었습니다. 예를 들어, 명령줄에서 아래와 같이 실행한다고 가정합니다:

java MyProgram arg1 arg2

이 경우, args 배열에는 {"arg1", "arg2"}가 저장됩니다. 이를 통해 프로그램 실행 시 다양한 설정이나 데이터를 외부에서 전달할 수 있습니다.

3. 반환값이 없는 이유

Java에서는 프로그램의 종료 상태를 JVM이 관리합니다.

  • 따라서 main 함수가 반환값을 가질 필요가 없습니다.
  • 프로그램 종료 시 System.exit()를 사용하여 종료 상태를 명시적으로 설정할 수 있지만, 대부분의 경우 JVM이 이를 자동으로 처리합니다.

C와 Java의 철학적 차이

  • C 언어는 운영체제와 밀접하게 작동하는 시스템 프로그래밍 언어로, 프로그램의 종료 상태를 운영체제에 반환해야 합니다.
  • Java는 플랫폼 독립적인 언어로, JVM 위에서 실행되며, 프로그램의 시작과 종료를 JVM이 관리합니다. 따라서 반환값이 필요하지 않습니다.

함수 형태 int main(void) public static void main(String[] args)
반환값 프로그램 종료 상태를 반환 (int) 반환값 없음 (void)
명령줄 인수 처리 argc, argv String[] args
종료 상태 관리 개발자가 직접 반환 JVM이 자동 관리

 

C와 Java는 설계 철학과 실행 환경이 다르기 때문에 main 함수의 형태도 달라집니다. 이를 이해하면 두 언어의 차이를 명확히 파악하고, 각각의 특징을 활용한 프로그래밍이 가능해집니다.