[Java] public static void main(string args)의 이해

2020. 5. 4. 12:01JAVA 기초/JAVA_Basic

들어가며
본 포스팅은 Jump to JAVA 의 예제와 설명에 기반하여 작성되었습니다.

 

보통 프로그래밍 언어의 차이를 보여주기 위해 "Hello World"라는 문장을 출력하는 코드를 비교하곤 합니다.

가장 대표적인 것이 아래와 같은 Python과 JAVA의 비교입니다.

 

# python
print("Hello World")
// Java
package example;

public class HelloWorld {

	public static void main(String args[]) {
		System.out.println("Hello World");
	}
}

 

Python 출력에서는 필요없는 public, static, void, main, String, args[] 과 같은 JAVA만의 여러 요소들이 보이는데요, 

Jump to JAVA 에는 이들을 다음과 같이 설명하고 있습니다. 

 

  • public : 메소드의 접근제어자, public은 누구나 이 메소드에 접근할 수 있다는 의미
  • static : 메소드에 static 이 지정되어 있는 경우 이 메소드는 인스턴스 생성없이 실행 할 수 있음을 의미
  • void : 메소드의 리턴값이 없음(void: 사전적으로 "텅 빈" 이라는 뜻)을 의미
  • String : 문자열을 나타내는 자바의 자료형
  • args[] : String 자료형에 대한 변수명으로 args 뒤에 []가 있으므로 한 개가 아닌 여러개의 값으로 이루어진 배열임을 의미
  • System.out.println : 표준출력으로 데이터를 보내는 자바의 내장 메소드로 println 메소드로 들어오는 문자열 값을 화면에 출력한다.

먼저 Python과 거의 유사한 부분을 찾아봅시다. JAVA의 System.out.println과 마찬가지로 Python의 print() 함수 역시 파이선의 내장 함수(=메소드) 입니다. print() 함수로 들어오는 문자열 값을 화면에 출력합니다.

 

이제 나머지 개념을 Python에 도입하여 이해해 봅시다.

단, 아래의 코드는 이해를 돕기 위해 작성한 것이며 실제로 JAVA의 코드와 Python의 코드는 세세한 부분에서 반드시 차이점이 존재합니다. 완벽하게 동일하지는 않습니다.

 

// Java's "Hello World"
public class HelloWorld {

	public static void main(String args[]) {
		System.out.println("Hello World");
	}
}
# Python's "Hello World"
class HelloWorld(object):

    @staticmethod
    def main():
        print("Hello World")

if __name__ == '__main__':
    HelloWorld.main()

 

먼저 public누구나 이 메소드에 접근할 수 있다는 의미를 지닌다고 되어있습니다. JAVA에서는 접근제어자라는 것이 존재하는데, 이는 외부에서 접근할수 있는 권한을 부여하는 일종의 제약이라고 볼 수 있습니다. JAVA에서는 제약이 강한순서대로 private -> protected -> public 이 존재합니다.

 

Python에서는 따로 외부접근자를 명시하지 않고, 작명법으로 이를 표시합니다.

private의 경우는 앞에 '__'(언더바 두 개) 를 붙여줍니다. Ex. __HelloWorld()

protected의 경우는 앞에 '_'(언더바 한 개) 를 붙여줍니다. Ex. _HelloWorld()

public의 경우에는 아무 것도 작성하지 않습니다. Ex. HelloWorld()

 

다음으로 static은 메소드를 인스턴스 없이 실행할 수 있게 해줍니다.

JAVA는 static 키워드를 명시적으로 작성하고,

Python은 선언한 함수 위에 @staticmethod를 작성합니다.

 

void 는 함수의 반환(return) 값이 없다는 것을 의미합니다.

JAVA는 void라는 키워드를 통해 명시적으로 작성을 하지만,

Python은 이와 같은 키워드를 아예 사용하지 않습니다. 

 

String args[]의 경우는 JAVA의 자료형 String이 여러 개 들어가는 배열 args[]를 의미합니다.

Python은 자료형을 명시적으로 나타내지도 않고, 아규먼트(args)또한 명시적으로 작성하지 않습니다.

 

마지막으로 실행부입니다.

JAVA는 항상 main 이라는 이름이 들어간 메소드부터 실행됩니다.

Python은 실행하고자 하는 .py 파일을 실행하는 순간 __name__ 이 __main__이 되어 시작점으로 간주되어 시작합니다.

 

정리하자면, JAVA는 프로그램의 실행에 있어서 필요한 대부분의 것들을 명시적으로 작성해줍니다. 반면 Python은 묵시적으로 생략하는 경우가 많습니다.