[31일] Java (18) - Main
이클립스로 자바 코드를 F11을 눌러서 실행시킬 때,
우린 단 한 번도 main() 함수를 호출한 적이 없다.
이는 자바를 설치할 때 함께 설치된 자바 가상 머신이 main() 함수 안에 있는 코드를 동작시켜주기 때문이다.
자바의 슬로건은 이 문장이다.
'한 번 작성하면, 어디서든 작동한다(write one, run anywhere)'.
이 문장이 어떤 뜻이냐하면 리눅스, 매킨토시, 윈도우와 같은 다양한 플랫폼에 개별적인 실행 파일을 따로따로 만들지 않아도 된다는 뜻이다.
원래는 각 플랫폼마다 실행될 수 있도록 플랫폼용 컴파일러를 따로 준비해야 했었던 과거의 프로그램들과는 달리 자바는 자바 자체의 컴파일러를 통해 어떤 플랫폼에서도 프로그램이 실행될 수 있도록 도와주는 것이다.
이것을 가능하게 하는 것이 바로 바이트 코드(Example.class)인데, 바이트 코드는 완벽한 실행 파일이 아닌 중간 기계어이다.
"완벽하지 않으면 실행이 안되잖아요!!"
맞다. 이 바이트 코드는 한 가지 과정을 더 거쳐야 완벽한 실행 파일로 변환된다.
바로 각 운영 체제의 자바 가상 머신(Jave Virtual Machine ; JVM)을 거치는 것이다.
그러니까 이전에는 각 플랫폼마다의 실행 파일을 따로 만들어야했는데, 이제는 자바를 통해 .class파일을 만들기만 하면 각 운영 체제에 설치된 자바 가상 머신을 통해 프로그램 실행이 가능하게 해주는 것이다.
이렇게 자바에서 프로그램을 실행을 할 때 가상머신은 main() 함수를 가장 먼저 호출하고 그 이후를 실행한다.
https://ddcloud.tistory.com/111?category=1303689
[JAVA] #4-3 메인(main)
1. 메인 함수 자바를 작업하면 항상 등장하는 main() 함수의 정체에 대해 알아보자. public static void main(String[] args) {} 지금까지의 흐름을 통해 우리는 자바 코드를 작성할 때마다 가장 위에 쓰게
ddcloud.tistory.com
package oop0907;
public class Test06_main {
public static void test() {
main();
위와 같이 main() 함수는 사용자가 임의로 호출할 수 없다.
Java Virtual Machine(JVM)
자바 가상 머신이 클래스를 실행할 때 main() 함수를 먼저 호출하고 그 이후 실행된다.
패키지 구분
패키지 안에 또 다른 패키지를 만들 수 있다. 구분은 . 으로 한다.
Main 테스트
src 안에 MainTest라는 클래스를 만든다.
public class MainTest {
public static void main(String[] args) { //argument string
// oop0907.Test06_main.java 참조
for(int i=0; i<args.length; i++) {
System.out.println(args[i]);
}//for end
}//main() end
}//class end
테스트는 명령 프롬프트로 진행할 것이다.
main() 함수가 호출되는 시점과 값을 전달하는 예제
default package에 있는 MainTest.java참조
명령 프롬프트에서 실습합니다
>cd\ 최상위 루트 이동
>i: 드라이브 변경
>cd java202207 폴더 변경
>cd workspace
>cd basic01_java
>cd src
>dir
>javac MainTest.java 자바 소스 컴파일
>java MainTest 자바 클래스 실행
>java MainTest 입력값
만약 컴파일 과정에서 글자가 깨진다면 (대부분 한글이 포함된 경우)
javac MainTest.java -encoding utf-8 이렇게 컴파일을 해보자
다시 돌아가서
.class 파일 실행 시 전달 값은 main() 함수의 매개변수가 받는다.
MainTest의 소스코드를 다시 보자
public class MainTest {
public static void main(String[] args) { //argument string
// oop0907.Test06_main.java 참조
for(int i=0; i<args.length; i++) {
System.out.println(args[i]);
}//for end
}//main() end
}//class end
명령 프롬프트에서 입력한 Seoul, Jeju, Busan이 main 함수의 매개변수로 들어간다.