웹개발 교육/Java

[31일] Java (18) - Main

ewok 2022. 9. 7. 18:08

이클립스로 자바 코드를 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 함수의 매개변수로 들어간다.