System.out.println("Hello") 의 동작원리
System.out은 System이 가지고 있는 out이라는 의미이다. out 필드라고 한다.
즉, System 클래스가 가지고 있는 out 필드는 PrintStream 타입이고, 이 PrintStream은 다양한 println, print 메서드를 가지고 있다.
https://docs.oracle.com/javase/8/docs/api/java/lang/System.html
out.println은 out이 가지고 있는 println이라는 의미이다. println 메서드라고 한다.
out이 가지고 있는 println 메서드의 역할은 괄호안의 내용을 화면에 출력한다. 즉, Hello가 출력되게 된다.
컴파일하기
컴파일하려면 반드시 javac라는 프로그램이 필요하다. javac는 자바 컴파일러를 말한다.
javac Hello.java
터미널에서 위의 명령을 입력하면 Hello.java라는 파일을 읽어들여서 컴파일을 하게 된다.
컴파일을 성공하면 Hello.class파일이 생성되고, 컴파일이 실패하면 오류메시지가 보여진다.
이때, Hello.class파일을 byte 파일이라고 한다. Hello.java는 에디터로 열어보면, 사람이 알아들을 수 있는 말로 되어있지만, Hello.class는 사람이 알아볼 수 없는 말로 되어있다.
JVM으로 실행하기
자바로 작성된 프로그램이라는 것은 컴파일된 클래스. 즉, byte 파일을 말한다.
작성된 바이트 파일을 실행하려면 JVM이 필요하다. 이 JVM 역할을 수행하는 것이 java 명령이다.
JVM은 바이트 코드를 읽어들여 실행된다. 바이트 코드를 읽어들여 실행하기 위해서는 다음과 같은 명령을 실행한다.
java Hello
java 프로그램은 Hello 클래스를 한줄 읽고 해석하고 실행하고를 반복하면서 실행한다. 이렇게 바이트 코드를 한줄씩 읽어들이고, 기계어로 바꿔가며 실행하는 방식을 인터프리터 방식이라고 한다.
정리
자바에서 컴파일은 기계어로 바로 바꿔주는 것이 아니라 바이트코드로 만들어주는 것이다. 컴파일되어서 만들어진 바이트코드는 각각의 CPU/OS에 맞게 설치된 JDK안에 있는 JVM이 한줄씩 읽어나가면서 기계어로 바꿔가며 실행한다.
인용
'Language > Java' 카테고리의 다른 글
논리 연산자 ^ (0) | 2023.09.07 |
---|---|
변수와 리터럴 (0) | 2023.09.07 |
자바에서 파일 업로드 검증 (0) | 2023.07.02 |
자바에서 파일 다루기 (링크) (0) | 2023.06.27 |
ThreadLocal (2) | 2023.06.07 |