1. 메인 함수
자바를 작업하면 항상 등장하는 main() 함수의 정체에 대해 알아보자.
public static void main(String[] args) {}
지금까지의 흐름을 통해 우리는 자바 코드를 작성할 때마다 가장 위에 쓰게 되는 코드 4가지 중 2가지를 알게 되었다.
void(리턴값이 없다), 그리고 main() 은 무엇인진 모르겠지만 함수이며 자료형이 String이라는 것!
(나머지 두 개도 차차 알아가자)
2. 자바가상머신(Java Virtual Machine; javaw.exe)
우리가 이클립스로 자바 코드를 F11을 눌러서 실행시킬 때,
우린 단 한번도 main()함수를 호출한 적이 없다.
이는 자바를 설치할 때 함께 설치된 자바가상머신이 main()함수 안에 있는 코드를 동작시켜주기 때문이다.
자바의 슬로건은 이 문장이다.
'한 번 작성하면, 어디서든 작동한다(write one, run anywhere)'.
이 문장이 어떤 뜻이냐하면 리눅스, 매킨토시, 윈도우와 같은 다양한 플랫폼에 개별적인 실행 파일을 따로따로 만들지 않아도 된다는 뜻이다.
원래는 각 플랫폼마다 실행될 수 있도록 플랫폼용 컴파일러를 따로 준비해야했었던 과거의 프로그램들과는 달리 자바는 자바 자체의 컴파일러를 통해 어떤 플랫폼에서도 프로그램이 실행될 수 있도록 도와주는 것이다.
이것을 가능하게 하는 것이 바로 바이트 코드(Example.class)인데, 바이트 코드는 완벽한 실행 파일이 아닌 중간 기계어이다.
"완벽하지 않으면 실행이 안되잖아요!!"
맞다. 이 바이트 코드는 한 가지 과정을 더 거쳐야 완벽한 실행 파일로 변환된다.
바로 각 운영 체제의 자바 가상 머신(Jave Virtual Machine ; JVM)을 거치는 것이다.
그러니까 이전에는 각 플랫폼마다의 실행 파일을 따로 만들어야했는데, 이제는 자바를 통해 .class파일을 만들기만 하면 각 운영 체제에 설치된 자바 가상 머신을 통해 프로그램 실행이 가능하게 해주는 것이다.
이렇게 자바에서 프로그램을 실행을 할 때 가상머신은 main()함수를 가장 먼저 호출하고 그 이후를 실행한다.
3. 패키지의 구분
당연하게도 패키지 안에 패키지를 만들 수 있다.
그리고 자바에서 패키지의 구분은 .(온점) 으로 한다.
위의 net.bbs는 net이라는 패키지 안에 있는 bbs 패키지란 뜻이다.
4. 패키지 없이 클래스 만들고 main() 함수의 args[] 배열 내용 확인해보기
이번엔 패키지가 없는 클래스를 만들어보려한다.
이대로 Finish를 눌러서 생성시키면 MainTest.java 파일이 default package에 들어가있는 모습을 확인할 수 있다.
이제 출력된 화면 안에서 main() 함수 안에 있는 args 라는 배열을 확인해보려 한다.
여기서 args는 argument string의 약자로 전달문자란 뜻이다.
그 후 for문을 사용하여 args 배열 안에 있는 내용을 출력시키는 코드를 적었다.
여기서부터는 명령 프롬프트를 사용하여 확인을 해야 한다.
명령 프롬프트로 가보자.
우선 자바의 파일 경로를 따라 왔다.
그 후 dir을 입력하여 이 안에 MainTest.java 파일이 있는지 확인해보았다.
이제 java 파일을 javac 명령어를 사용하여 컴파일 해주었다.
그리고 dir을 한번 더 입력하면 .class 파일이 생성된 것을 확인할 수 있다.
그 후 MainTest.class 파일을 불러와서 전달값을 넣어주었다.
그러자 Seoul, Jeju, Busan이라는 값들이 출력이 되는 것을 볼 수 있다.
이로써 .class 파일을 실행할 때 전달값은 main() 함수의 매개변수가 받는다는 것을 눈으로 확인할 수 있다.
이렇게 main() 함수란 자바프로그램이 시작될 때 가장 먼저 실행되는 메서드임을 기억하면 된다.
'⁂ Java > : 기본 익히기' 카테고리의 다른 글
[JAVA] #5-2 New 연산자 - 참조 자료형을 이해해보자 (0) | 2022.09.08 |
---|---|
[JAVA] #5-1 클래스(Class) (2) | 2022.09.08 |
[JAVA] #4-3 자바의 함수 호출 방식 (0) | 2022.09.07 |
[JAVA] #4-2 오버로드(Overload) (0) | 2022.09.07 |
[JAVA] #4-1 메소드(Method) (0) | 2022.09.07 |