[JAVA] public static void main?

kindof

·

2021. 6. 20. 17:37

자바의 메인 메서드는 public static void main(String[] args)로 시작하는데요.

 

public, static, void라는 각각의 키워드에 대한 이해가 있으신 분들은 왜 메인 함수가 위와 같은 형태를 가져야하는지 짐작하실 수 있을겁니다.

 

하지만 자바를 처음 공부하시거나 한 번도 이 메인 함수의 구조에 대해 생각을 안해보신 분이라면 약간 당황(?)스러운 질문일 것 같아 오늘은 이 메인 함수 구조에 대한 해석을 한 번 해보려고 합니다.

 

 

1. public

public, private, protected 같은 키워드는 접근 지정자 또는 접근 제한자라고 부릅니다. 이 중에서 public은 제한없이 어디에서나 사용이 가능하다는 뜻이죠.

 

반면, protected는 동일한 패키지 내에서나 상속 클래스 등에서만 사용할 수 있고 private는 외부 클래스에서는 접근이 불가능합니다.

 

main 메서드에서는 다른 클래스의 메서드 등을 호출해야 하는데 막상 main 자체가 다른 곳에서 접근을 허용하지 않는다면 어떻게 될까요?

 

메인 함수를 불러줄 수 있는 녀석이 없게 되겠죠. 따라서 main의 접근제한자는 public이 되어야합니다.

2. static

static으로 선언되는 경우 해당 클래스는 Compile 시점에 생성됩니다.

 

또한 static 요소를 static이 아닌 요소에서 직접 호출하는 것은 불가능하고, main 메서드는 프로그램의 시작점이기 때문에 객체를 생성하지 않아도 작업을 수행해야 하는 의무가 있습니다.

 

따라서 main 메서드는 JVM에 의해 호출되기 때문에 반드시 static으로 선언되어 미리 메모리에 로드되어 있어야 합니다.

3. void

메서드의 반환형이 없다는 뜻으로, 해당 메서드가 종료되면 호출한 곳으로 돌아갑니다.

 

메인 함수를 끝난다는 말은 프로그램이 종료된다는 말인데, 이 때 무슨 값을 리턴받는 것이 무슨 의미가 있을까요? 아무 의미가 없겠죠. 따라서 메인 함수는 void형으로 선언합니다. 사실, void형으로 선언하지 않아도 상관은 없습니다. 의미가 없을 뿐이죠.

4. String[] args

Command line 옵션을 받아오기 위한 매개변수입니다.

 

이 옵션을 파싱하여 같은 main 메서드를 실행하더라도 수행하는 코드의 갈래가 나뉠 수 있게 합니다.

 


 

혹시라도 위 내용이 잘 이해가 되지 않으시나, {public, private, protected, default, static, final, ... ,} 중에 정확히 모르시는 개념이 있다면 한 번은 꼭 찾아보시길 추천드립니다!

 

감사합니다.