💡 해당 글은 『자바의 신 3판』을 복습하며 도서의 내용과 본인의 생각을 정리한 글입니다.
☁️ 내용정리
터미널에서 자바 프로그램 작성하고 실행하기
% java [-options] class [args...] // .class 파일 실행
% java [-options] jar jarfile [args...] // .jar 파일 실행
% vi GodOfJava.java
커맨드에서 java파일을 생성하고 아래와 같이 작성한다.
public class GodOfJava {
public void main(String[] args) {
System.out.println(String.join(", ", args));
}
}
javac
명령어를 사용하여 .java
파일을 컴파일하면
바이트 코드로 구성된 .class
파일이 생성되는 것을 확인할 수 있다.
% javac GodOfJava.java
% ls
GodOfJava.class GodOfJava.java
이제 실행시켜보자.
% java GodOfJava Hello god of java
Hello, god, of, java
여기까지가 커맨드에서 자바 파일을 생성하고 컴파일 후 실행하는 과정이다.
정리해보면
- 소스코드를 작성하고 자바 파일로 저장한다.
javac
(자바 컴파일러)가.java
파일을 컴파일하여.class
바이트 코드 파일을 생성한다.java
명령어를 사용하여 .class 파일을 실행하면,JVM
에 의해 기계어로 해석되거나JIT
컴파일러에 의헤 플랫폼에 맞는 기계어로 해석된다.
Path
java 명령어는 어느 위치에서나 실행시킬 수 있다.
JDK를 설치한 bin 디렉터리를 path로 등록해놨기 때문이다.
mac에선 아래와 같이 path로 등록되어 있는 bin 디렉터리를 확인할 수 있다.
% echo $PATH | tr ':' '\n'
/usr/local/bin
/usr/local/sbin
...
주석
// 한 줄 주석이다
/* 여러 줄을 위한 주석이다 */
/**
* 문서용 주석이다
*/
주석은 컴파일 시 컴파일러에 의해 삭제된다.
.class 바이트코드를 디컴파일해보면 주석이 삭제된 모습을 볼 수 있다.
☁️ 의문
바이트 코드는 javap
명령어를 통해 disassemble
하여 해석할 수 있고, 예전에 분석도 해본적이 있다.
그런데 cat 명령어로 바이트 코드를 열어보면 어떻게 될까?
오잉? 깨질 것 이라고 생각은 했는데, 생각한 것과는 좀 다르게 깨진다.
hyunsb@HyunsbMac godofjava % cat GodOfJava.class
?????
java/lang/Object<init>()V
java/lang/SystemoutLjava/io/PrintStreamHello God Of Java!
java/io/PrintStreamprintln(Ljava/lang/String;)V GodOfJavaCodeLineNumberTablemain([Ljava/lang/String;)V
바이트 코드와 바이너리 코드
바이트 코드
: 가상머신이 이핼할 수 있는 언어
바이너리 코드
: CPU가 이해할 수 있는 언어
즉, javac를 통해 컴파일한 코드는 JVM이 읽을 수 있는 바이트 코드이고, JVM이 바이트 코드를 읽어들여 기계어로 환시키면 그게 바이너리 코드이다.
메인 메서드의 매개변수 args
메인 메서드의 스트링타입 배열 매개변수 args
는 자바 프로그램 실행 시 입력한 문자열이 들어온다.
만약 메인 메서드에서 매개변수를 빼버린다면 아래처럼 컴파일 시 오류를 발생시킨다.
오류: GodOfJava 클래스에서 기본 메소드를 찾을 수 없습니다. 다음 형식으로 기본 메소드를 정의하십시오.
public static void main(String[] args)
또는 JavaFX 애플리케이션 클래스는 javafx.application.Application을(를) 확장해야 합니다.
☁️ 질문
- 커맨드에서 자바 파일을 컴파일할 때 사용하는 명령어는?
더보기javac 라는 명령어를 통해 .java파일을 컴파일하여 .class 바이트코드를 생성한다.
- 커맨드에서 클래스 파일을 실행하기 위해 사용하는 명령어는?
더보기java 명령어를 사용하여 .class 파일을 실행한다. 여기서 확장자는 입력하지 않는다.
- 자바 코드를 작성하고 실행하기까지의 순서는?
더보기.java 파일을 생성하고 소스 코드를 작성한다.
→
자바 파일을 자바 컴파일러를 통해 JVM이 해석할 수 있는 바이트코드를 생성한다.→
클래스 파일을 분석하여 각 메모리 공간에 실행에 필요한 데이터를 배치하고excute engine
에 의해 프로그램이 실행된다.→
java 명령어를 통해 JVM이 바이트코드를 읽으며 기계어로 컴파일하거나 상황에 따라 JIT에 의해 운영 환경에 맞는 기계어로 변경한다. - 바이트 코드란 무엇인가?
더보기바이트 코드는 가상 머신에서 읽을 수 있는 이진 표현법이다.
- 바이너리 코드란 무엇인가?
더보기바이너리 코드는 CPU가 읽을 수 있는 이진 표현법이다.
reference
'JAVA > 자바의 신' 카테고리의 다른 글
6장. 내가 조건을 좀 따져요 (0) | 2024.01.04 |
---|---|
5장. 계산을 하고 싶어요 (1) | 2024.01.04 |
4장. 정보를 어디에 넣고 싶은데 (1) | 2024.01.04 |
3장. 자바를 제대로 알려면 객체가 무엇인지를 알아야 해요 (0) | 2024.01.03 |
1장. 프로그래밍이란 무엇인가? (2) | 2024.01.03 |
💡 해당 글은 『자바의 신 3판』을 복습하며 도서의 내용과 본인의 생각을 정리한 글입니다.
☁️ 내용정리
터미널에서 자바 프로그램 작성하고 실행하기
% java [-options] class [args...] // .class 파일 실행
% java [-options] jar jarfile [args...] // .jar 파일 실행
% vi GodOfJava.java
커맨드에서 java파일을 생성하고 아래와 같이 작성한다.
public class GodOfJava {
public void main(String[] args) {
System.out.println(String.join(", ", args));
}
}
javac
명령어를 사용하여 .java
파일을 컴파일하면
바이트 코드로 구성된 .class
파일이 생성되는 것을 확인할 수 있다.
% javac GodOfJava.java
% ls
GodOfJava.class GodOfJava.java
이제 실행시켜보자.
% java GodOfJava Hello god of java
Hello, god, of, java
여기까지가 커맨드에서 자바 파일을 생성하고 컴파일 후 실행하는 과정이다.
정리해보면
- 소스코드를 작성하고 자바 파일로 저장한다.
javac
(자바 컴파일러)가.java
파일을 컴파일하여.class
바이트 코드 파일을 생성한다.java
명령어를 사용하여 .class 파일을 실행하면,JVM
에 의해 기계어로 해석되거나JIT
컴파일러에 의헤 플랫폼에 맞는 기계어로 해석된다.
Path
java 명령어는 어느 위치에서나 실행시킬 수 있다.
JDK를 설치한 bin 디렉터리를 path로 등록해놨기 때문이다.
mac에선 아래와 같이 path로 등록되어 있는 bin 디렉터리를 확인할 수 있다.
% echo $PATH | tr ':' '\n'
/usr/local/bin
/usr/local/sbin
...
주석
// 한 줄 주석이다
/* 여러 줄을 위한 주석이다 */
/**
* 문서용 주석이다
*/
주석은 컴파일 시 컴파일러에 의해 삭제된다.
.class 바이트코드를 디컴파일해보면 주석이 삭제된 모습을 볼 수 있다.
☁️ 의문
바이트 코드는 javap
명령어를 통해 disassemble
하여 해석할 수 있고, 예전에 분석도 해본적이 있다.
그런데 cat 명령어로 바이트 코드를 열어보면 어떻게 될까?
오잉? 깨질 것 이라고 생각은 했는데, 생각한 것과는 좀 다르게 깨진다.
hyunsb@HyunsbMac godofjava % cat GodOfJava.class
?????
java/lang/Object<init>()V
java/lang/SystemoutLjava/io/PrintStreamHello God Of Java!
java/io/PrintStreamprintln(Ljava/lang/String;)V GodOfJavaCodeLineNumberTablemain([Ljava/lang/String;)V
바이트 코드와 바이너리 코드
바이트 코드
: 가상머신이 이핼할 수 있는 언어
바이너리 코드
: CPU가 이해할 수 있는 언어
즉, javac를 통해 컴파일한 코드는 JVM이 읽을 수 있는 바이트 코드이고, JVM이 바이트 코드를 읽어들여 기계어로 환시키면 그게 바이너리 코드이다.
메인 메서드의 매개변수 args
메인 메서드의 스트링타입 배열 매개변수 args
는 자바 프로그램 실행 시 입력한 문자열이 들어온다.
만약 메인 메서드에서 매개변수를 빼버린다면 아래처럼 컴파일 시 오류를 발생시킨다.
오류: GodOfJava 클래스에서 기본 메소드를 찾을 수 없습니다. 다음 형식으로 기본 메소드를 정의하십시오.
public static void main(String[] args)
또는 JavaFX 애플리케이션 클래스는 javafx.application.Application을(를) 확장해야 합니다.
☁️ 질문
- 커맨드에서 자바 파일을 컴파일할 때 사용하는 명령어는?
더보기javac 라는 명령어를 통해 .java파일을 컴파일하여 .class 바이트코드를 생성한다.
- 커맨드에서 클래스 파일을 실행하기 위해 사용하는 명령어는?
더보기java 명령어를 사용하여 .class 파일을 실행한다. 여기서 확장자는 입력하지 않는다.
- 자바 코드를 작성하고 실행하기까지의 순서는?
더보기.java 파일을 생성하고 소스 코드를 작성한다.
→
자바 파일을 자바 컴파일러를 통해 JVM이 해석할 수 있는 바이트코드를 생성한다.→
클래스 파일을 분석하여 각 메모리 공간에 실행에 필요한 데이터를 배치하고excute engine
에 의해 프로그램이 실행된다.→
java 명령어를 통해 JVM이 바이트코드를 읽으며 기계어로 컴파일하거나 상황에 따라 JIT에 의해 운영 환경에 맞는 기계어로 변경한다. - 바이트 코드란 무엇인가?
더보기바이트 코드는 가상 머신에서 읽을 수 있는 이진 표현법이다.
- 바이너리 코드란 무엇인가?
더보기바이너리 코드는 CPU가 읽을 수 있는 이진 표현법이다.
reference
'JAVA > 자바의 신' 카테고리의 다른 글
6장. 내가 조건을 좀 따져요 (0) | 2024.01.04 |
---|---|
5장. 계산을 하고 싶어요 (1) | 2024.01.04 |
4장. 정보를 어디에 넣고 싶은데 (1) | 2024.01.04 |
3장. 자바를 제대로 알려면 객체가 무엇인지를 알아야 해요 (0) | 2024.01.03 |
1장. 프로그래밍이란 무엇인가? (2) | 2024.01.03 |