학습할 것
- 컴파일하는 법
- 실행하는 법
컴파일하는 법
1
2
3
4
5
6
7
8
|
package example;
public class Example {
public static void main(String[] args) {
int a = 5;
System.out.println("a는"+a);
}
}
|
(Example.java)
위 예제로 컴파일과 실행하는 법을 다루겠습니다.
자바는 JVM을 통해 프로그램을 실행합니다. 따라서 고급언어로 작성된. java파일을 바이트코드인. class파일로 변경해야 합니다. 이 작업을 컴파일러를 통해 변경하게 되며 javac라는 명령어를 사용합니다. (javac는 JDK에 존재합니다)

javac를 통해 .java ->. class로 변경해 줍니다.
(Encoding Error 발생 시)

해당 에러가 발생할 수 있습니다. 기본적으로 ms-949인코딩으로 되어있어서 발생하는 에러입니다.

위와 같이 인코딩을 넣어주면 됩니다.
만들게 되면 .class 파일이 추가된 것을 볼 수 있습니다.

이. class파일은 바이트코드로 되어있습니다.
(바이트코드 확인)

javap를 통해 바이트코드를 확인할 수 있는데 이를 역어셈블한다 합니다.
역컴파일의 경우 다시 원래의 자바코드로 변환하는 데에 반해 역어셈블은 해당 클래스 파일의 기본 구조와 바이트코드가 나오게 됩니다.
.class파일을 실행하기 위해서는 java 명령어가 필요합니다.

(NoClassDefFoundError)

여러 이유가 있겠지만 여기서는 패키지에 대해서만 다루겠습니다. 패키지를 사용하지 않았다면 별다른 문제없이 결과가 나왔을 것입니다. 다만 패키지 사용 시 조금 다르게 넣어줘야 합니다.
먼저 최상위 패키지로 이동한 후 패캐지 경로를 포함하여 명령을 주면 됩니다.

컴파일 옵션
상위 컴파일러로 실행 후 하위 버전의 JDK나 JRE로 실행하였을 때 에러가 발생합니다.
지금까지는 자바11 버전으로 결과를 봤었습니다. 이번에는 자바11로 컴파일한 .class파일을 자바8로 실행해보겠습니다.

위 사진처럼 "java.lang.UnsupportedClassVersionError"가 뜨며 55버전(자바11)로 컴파일했지만 52(자바8)로 실행하여 에러가 뜬 것을 볼 수 있습니다.
이번엔 반대의 경우로 자바8버전으로 컴파일한 후 자바11로 실행을 해보겠습니다.


하위 버전의 컴파일러로 컴파일 후 상위 버전으로 실행은 성공했습니다.
자바 언어로 작성한 고급언어 코드는 컴파일러를 통해서 바이트코드가 됩니다. 상위 버전으로 변환된 바이트코드를 하위 버전으로 실행하게 된다면 실행파일에서 읽지 못하는 현상이 발생하여 에러가 뜨는 거 같습니다.
반대로 하위 버전으로 변환된 바이트코드의 경우 상위 버전으로 실행하게 되면 실행파일에서 하위 버전에 대한 호환을 해줘서 실행이 가능한 거 같습니다.
컴파일 추가 옵션: -target:
지정된 자바버젼의 VM에서 작동 되어지도록 클래스파일을 생성 시킵니다.
java -target 자바버젼
- 1.1jvm 1.1 버젼에서 호환되어질수 있는 클래스 파일생성
- 1.2jvm 1.2 버젼에서 호환되어질수 있는 클래스 파일생성
- 1.3jvm 1.3 버젼에서 호환되어질수 있는 클래스 파일 생성
'JAVA > 자바스터디' 카테고리의 다른 글
[자바스터디] 4. 선택문, 반복문 (0) | 2022.01.06 |
---|---|
[자바스터디] 3. 연산자 (0) | 2022.01.03 |
[자바스터디] 2. 변수 (0) | 2022.01.02 |
[자바스터디] 1. JAVA와 JVM (0) | 2021.12.27 |
[Live Study] 자바 스터디 목차 (0) | 2021.11.07 |