Steem ๊ณ์ ์ ์์ฑํ๊ณ ์ฐ๋ ์ฒซ ๊ธ์
๋๋ค. ์ํด Steem์ ์ฌ์ฉํด ๋ณผ ์๋์ผ๋ก Java์ ๊ด๋ จ๋ ๊ธ์ ์ฐ์ฌํ๊ณ ์ ํฉ๋๋ค. ์ฐ์ฌ์์ ๋ค๋ฃฐ ๊ธ๊ฐ์ ํต์ฌ์ Java์ด์ง๋ง ์ค์ ๋ก Java๋ง์ ๋ค๋ฃฌ๋ค๊ธฐ ๋ณด๋ค๋ Java์ ์น ๊ฐ๋ฐ๊ณผ ๊ด๋ จ๋ ๋ค์ํ ์ฃผ์ ๋ฅผ ๋ค๋ฃจ๊ณ ์ ํฉ๋๋ค.
๊ฐ์ธ์ ์ธ ๋ชฉํ๋ ๊ทธ๋์ ์์ฌ ์์ด ์ต์ํ๊ฒ ์จ์๋ ๋ด์ฉ๋ค์ ์กฐ๊ธ ๋ ๊น๊ฒ ์ดํด๋ณด๊ณ ๊ธ๋ก ์ ์ผ๋ฉด์ ์ง์์ ์ ๋ฆฌํ๋ ๊ฒ์ ๋๋ค. ๊ฐ๋ฅํ๋ฉด ์๋ฌด๋ฆฌ ์ ๋ฌด๊ฐ ๋ฐ๋น ๋ ํ ์ฃผ์ ํ๋์ ์ฃผ์ ๋ฅผ ๋ค๋ฃจ๋ ๊ฒ์ด ๊ณต๊ฐ์ ์ธ ๋ชฉํ์ ๋๋ค. ์ด ์ฝ์์ ์ ์งํจ๋ค๋ฉด ์ฌ ํํด ์ ์ด๋ 40๊ฐ ๊ฐ๋์ ์ฃผ์ ๋ฅผ ๊ณต๋ถํ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
์ด ์ฐ์ฌ๋ฅผ ์ค๋นํ๋ฉด์ ์ด๋ฏธ ์กฐ์ฌํ๊ณ ์๊ฑฐ๋ ํ๋ ค๊ณ ๋ ธํธ์ ์ ์ด๋ ์ฃผ์ ๋ค์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ฐ๋ผ์, ์ด ์ฐ์ฌ๋ ์ด์ ๊ฐ๋ฐ์ ๋ง ์์ํ ์ฅฌ๋์ด ๊ฐ๋ฐ์ ํน์ ๋ณธ์ธ์ด Java ๋ฐ ์ปดํจํฐ ๊ณตํ๊ณผ ๊ด๋ จ๋ ๊ธฐ์ด๊ฐ ์กฐ๊ธ ๋ถ์กฑํ๋ค๊ณ ์๊ฐํ๋ ๋ถ๋ค์ ๋
์๋ก ๊ฐ์ ํ๊ณ ๊ธ์ ์ธ ์๊ฐ์
๋๋ค.
๊ทธ๋ผ ์ค๋์ ์ฃผ์ ์ธ Java์ Class์ ๋ํด์ ์์๋ด
์๋ค.
์ฒซ ๊ธ์ ๊ฐ๋ณ๊ฒ ๊ฐ์ฒด์งํฅ ์ธ์ด์ ํต์ฌ์ด๋ผ๊ณ ํ ์ ์๋ ํด๋์ค๋ฅผ Java ์ธ์ด์์ ์ด๋ป๊ฒ ๋ค๋ฃจ๋์ง ์ดํด๋ด
์๋ค.
Java๋ก ์์ฑํ ์ฝ๋๋ ์ด์์ฒด์ ํน์ ํน์ ํ๋์จ์ด ์ฌ์๊ณผ ์๊ด์์ด ์ด๋์๋ ์ง ๋์ผํ ๊ฒฐ๊ณผ๋ฌผ๋ก ์ปดํ์ผ๋ฉ๋๋ค. ์ด ๊ฒฐ๊ณผ๋ฌผ์ ์ฐ๋ฆฌ๋ ๋ฐ์ดํธ ์ฝ๋๋ผ๊ณ ๋ถ๋ฆ
๋๋ค. ๋์ผํ ๊ฒฐ๊ณผ๋ฌผ๋ก ์ฐ๋ฆฌ๋ ์ด๋ ํ๊ฒฝ์์๋ ๋์ผํ ๋ด์ฉ์ ์คํ์ํฌ ์๊ฐ ์์ต๋๋ค.
๋ฐ๋ฉด C๋ Go์ ๊ฐ์ ์ธ์ด๋ ์ฝ๋๋ฅผ ์ปดํ์ผํ๋ฉด ์คํํ๊ฒฝ์ ๋ง๋ binary๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋์ผํ ์ฝ๋๋ ์๋์ฐ์์ ์ปดํ์ผ ํ ๋์ Mac์์ ์ปดํ์ผ ํ ๋ ๋ค๋ฅธ ๊ฒฐ๊ณผ๋ฌผ์ ๋ด๋์ต๋๋ค.
์คํํ๊ฒฝ์ ์๊ด์์ด ๋์ผํ ๋ฐ์ดํธ์ฝ๋๋ฅผ ์ฌ์ฉํ ์ ์๋ ์ด์ ๋ JVM ๋๋ฌธ์
๋๋ค.
JVM(Java Virtual Machine)์ด ๋ฐ๋ก ์ปดํ์ผ๋ ๋ฐ์ดํธ์ฝ๋๋ฅผ ์คํํ๋ ์ผ์ ๋ด๋นํฉ๋๋ค. JVM ๋ฐ์ดํธ์ฝ๋๋ฅผ ํด์ํ์ฌ ์คํํ๋ ๊ฐ์์ ๊ธฐ๊ณ๋ก ๋ฐ๋ผ๋ณด๋ ๋ฐฉ์์ JVM์ ๋ธ๋๋ฐ์ค๋ก ๋ฐ๋ผ๋ณด๋ ์ถ์์ ์ธ ์ ๊ทผ์
๋๋ค.
์ฃผ์: ์ ์ ๊ผฐ๋์ค๋ฌ์ด ์ฌ์กฑ์ด ์ด์ด์ง๋๋ค.
์ด ๊ธ๊ณผ ์์ผ๋ก์ ์ฐ์ฌ์์ ์ฐ๋ฆฌ๋ JVM์ ์์ฃผ ์ดํด๋ณผ ์์ ์
๋๋ค. ์ฌ์ค Java์ธ์ด์ ๊ตฌ๋ฌธ์ ์ดํดํ๊ณ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ ๊ฒ๊น์ง๊ฐ ๊ฐ๋ฐ์์ ์ญํ ์ด๋ผ๊ณ ๋ณผ ์๋ ์์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ ์์ฑํ Java ์ฝ๋๋ฅผ ๋ฒ์ฉ์ ์ธ ๋ฐ์ดํธ์ฝ๋๋ฅผ ๋ณํํ๊ณ ์ด๋ฅผ JVM ์์์ ์คํํ๊ฒฝ์ ์๊ด ์์ด ๋์ผํ๊ฒ ์ํํ ์ ์๋๋ก ํ๋ ๊ฒ์ Java์ธ์ด์ JVM์ ๋ง๋ ์ด๋ค์ ๋ชซ์
๋๋ค.
JVM์ ๊น์ด ์ดํด๋ณด๋ ๊ฒ์ ์ฌ๋ฌ๋ชจ๋ก ์๋ฏธ๊ฐ ์์ต๋๋ค. ๋ฌผ๋ก ์ค๋ฌดํ๊ฒฝ์์ ํธ๋ฌ๋ธ์ํ
๋ฐ ์ต์ ํ๋ฅผ ์งํํ๋๋ฐ JVM์ ๊ตฌ์กฐ์ ์๋ฆฌ๋ ํฐ ๋์์ด ๋ฉ๋๋ค. ๊ทธ๋ฐ๋ฐ ์ ๊ฐ ์๊ฐํ๋ ๋ ์ค์ํ ๋ถ๋ถ์ ๋ค๋ฅธ๋ฐ ์์ต๋๋ค. ํ ๊ฐ์ง ๊ธฐ์ ์ ์๋ฆฌ๋ฅผ ๊น์ด ์ดํดํ๋ ๊ฒ ๊ทธ ์์ฒด๊ฐ ๊ฐ์ง๋ ์ง์์ ํ์ฅ์ฑ์
๋๋ค.
ํด ์๋ ์ ๊ฒ์ ์์ต๋๋ค. JVM์์ ์ฌ์ฉ๋๋ ์๋ฆฌ๋ ๋ด์ฉ์ ์ดํดํ๋ฉด ๋ค๋ฅธ ์์คํ
์ ์ดํดํ๊ณ ๋ถ์ํ๋๋ฐ ํฐ ๋์์ด ๋ฉ๋๋ค. ์ด ์ฐ์ฌ์ ๋ชฉ์ ๋ ๊ฐ์ ๋งฅ๋ฝ์
๋๋ค. ๊ตณ์ด ๋ชฐ๋ผ๋ ๋๋ ๋ด์ฉ์ด์ง๋ง ์๊ฐ์ด ํ๋ฝํ๋ ํ ์ง์ํ๊ฒ ์ดํด๋ณด๊ณ ํ๋ณด๋ ๊ฒ์ด ๋ชฉ์ ์
๋๋ค.
์คํ์ด๋ผ๊ณ ๋ ๋งํ๋ ๋ช
์ธ๋ฅผ ์ง์ ์ฝ๋ ํ๋ จ์ฐจ์์์๋ JVM์ ์ดํดํ๋ ๊ฒ์ ํฐ ๋์์ด ๋ฉ๋๋ค. Java๋ฟ ์๋๋ผ ๋ง์ ๊ธฐ์ ๋ค์ ๊ทธ ๊ธฐ์ ์ ์ค๋ช
ํ๋ ๊ณ ์ ํ ๋ฌธ์ ๋ช
์ธ๊ฐ ์กด์ฌํฉ๋๋ค. ๋ช
์ธ๋ ๊ธฐ์ ์ ๊ตฌํ์ ์ค๋ช
ํ๋ ๋ฌธ์๊ฐ ์๋๋ผ ๊ธฐ์ ๊ทธ ์์ฒด๋ฅผ ์ ์ํฉ๋๋ค. ๋ฐ๋ผ์ ๊ธฐ์ ์ ์ค์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๊ตฌํํ๋ ์กฐ์ง์ด๋ ์ฌ๋๋ง๋ค ๋ค๋ฅผ ์ ์์ต๋๋ค. JVM๋ง ํ๋๋ผ๋ ์ฐ๋ฆฌ๊ฐ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ HotSpot JVM ์ธ์๋ IBM์ JVM, Azul์ฌ์ Zing ๋ฑ์ด ์์ต๋๋ค.
์ฐ๋ฆฌ๋ ์ด์ ๋ฐ์ดํธ์ฝ๋์์ ์์ํ๋ ค๊ณ ํฉ๋๋ค. ์ฌ๊ธฐ ๋ค์๊ณผ ๊ฐ์ด ๊ฐ๋จํ ์์ ์ฝ๋๊ฐ ์์ต๋๋ค.
public class SimpleClass {
public static void main(String[] args) {
System.out.println("Deep dive into Java");
int myData = 0x12345678;
System.out.println("My Data: " + myData);
}
}
Side Note:
์ด ์์ ์ฝ๋์์๋ ํจํค์ง๊ฐ ์์ต๋๋ค. ํจํค์ง์ ํฌํจ๋์ง ์๋ ํด๋์ค๋ Unnamed Package๋ก ๋ถ๋ฅ๋ฉ๋๋ค. ์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ์๋ ํจํค์ง๋ฅผ ๋ฐ๋์ ์์ฑํ๊ณ ํด๋์ค๋ฅผ ํจํค์ง ๋จ์๋ก ๊ตฌ์ฑํ๋ ๊ฒ์ด ๊ด๋ก์
๋๋ค. ๋ค๋ง ์์ ์ ๊ฐ์ด ๊ฐ๋จํ ํ๋ก๊ทธ๋จ์ ๊ฒฝ์ฐ์๋ ํจํค์ง๋ฅผ ์๋ตํ ์ ์์ต๋๋ค.
ํฐ๋ฏธ๋์์ javac ๋ช
๋ น์ ์ฌ์ฉํ์ฌ SimpleClass.java ํ์ผ์ ๋ฐ์ดํธ์ฝ๋๋ก ์ปดํ์ผ ํ ์ ์์ต๋๋ค.
$ javac SimpleClass.java
๊ตฌ๋ฌธ์ ์ค๋ฅ๊ฐ ์๋ค๋ฉด ์ปดํ์ผ๋ฌ๋ ์ ์์ ์ผ๋ก SimpleClass.java ์ฝ๋๊ฐ ์์นํ ๊ณณ์ SimpleClass.class๋ฅผ ์์ฑํฉ๋๋ค. ๊ทธ๋ผ ์ด์ ๋ฐ์ดํธ์ฝ๋๋ฅผ ๋์ผ๋ก ์ง์ ์ดํด๋ด
์๋ค. ํฐ๋ฏธ๋์ hexdump ๋ช
๋ น์ ์คํํ ์ ์๋ค๋ฉด ๋ค์ ๋ช
๋ น์ ์ํํ์ฌ ๋ฐ์ดํธ์ฝ๋๋ฅผ ์ง์ ๋์ผ๋ก ๋ณผ ์ ์์ต๋๋ค.
$ hexdump SimpleMain.class
์๋ํฐ์์๋ Visual Studio Code๋ฅผ ์๋ก ๋ค๋ฉด hexdump ํ๋ฌ๊ทธ์ธ์ ์ค์นํด์ ๋ฐ์ดํธ์ฝ๋๋ฅผ ๋ณผ ์๋ ์์ต๋๋ค. hexdump ๋ช
๋ น์ ์ฌ์ฉํ์ฌ SimpleClass.class ์ ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ด์ฉ์ ํ์ธํ ์ ์์ต๋๋ค.
0000000 ca fe ba be 00 00 00 34 00 2e 0a 00 0d 00 16 09
0000010 00 17 00 18 08 00 19 0a 00 1a 00 1b 03 12 34 56
0000020 78 07 00 1c 0a 00 06 00 16 08 00 1d 0a 00 06 00
0000030 1e 0a 00 06 00 1f 0a 00 06 00 20 07 00 21 07 00
...
์ ๋ด์ฉ์ ๋ฐ์ดํธ ์ฝ๋์ ๋ด์ฉ์ hexdump๋ก ์กฐํํ๊ธฐ ๋๋ฌธ์ 16์ง์๋ก ํํ๋์ด ์์ต๋๋ค. 16์ง์ ํ์๋ฆฌ๋ฅผ ํํํ๋๋ฐ 4๋นํธ(2^4)๊ฐ ํ์ํฉ๋๋ค. ๋ฐ๋ผ์ 2์๋ฆฌ 16์ง์๋ 8๋นํธ ์ฆ 1๋ฐ์ดํธ๋ฅผ ๋ํ๋
๋๋ค. hexdump ๊ฐ ๊ตฌ๋ถํด๋์ 16์ง์ 2์๋ฆฌ๊ฐ ๋ฐ๋ก ํ๋์ ๋ฐ์ดํธ๋ฅผ ๋ํ๋
๋๋ค.
๋ชจ๋ Java ํด๋์ค์ ๋ฐ์ดํธ์ฝ๋๋ ์ฒซ 4 ๋ฐ์ดํธ๋ฅผ ์ง์ ๋ ์์ 0xCAFEBABE๋ก ์์ํฉ๋๋ค. ๋ชฉ์ ์ ๊ฐ๋จํฉ๋๋ค. JVM ๋ช
์ธ์์ ์ ์ํ ํด๋์ค ๊ท์น์ ๋ฐ๋ฅด๋์ง๋ฅผ ํ์ธํ๋ ์ฒซ๋ฒ์งธ ๋ฐฉ๋ฒ์
๋๋ค.
Side Note:
์ด ์ฐ์ฌ์์ Java์ JVM๊ด๋ จ ์คํ์ ์ฐธ์กฐํ๋ค๋ฉด ๊ฐ๋ฅํ๋ฉด ๊ธ์ ์์ฑ์์ ๊ธฐ์ค ์ต์ ์ธ Java9์ ๋ช
์ธ๋ฅผ ์ฐธ๊ณ ํฉ๋๋ค.
JVM ๋ช
์ธ 4์ฅ์์ ํด๋์ค ํฌ๋งท์ ๋ค์๊ณผ ๊ฐ์ด ์ ์ํ๊ณ ์์ต๋๋ค.
ClassFile {
u4 magic;
u2 minor_version;
u2 major_version;
u2 constant_pool_count;
cp_info constant_pool[constant_pool_count-1];
u2 access_flags;
u2 this_class;
u2 super_class;
u2 interfaces_count;
u2 interfaces[interfaces_count];
u2 fields_count;
field_info fields[fields_count];
u2 methods_count;
method_info methods[methods_count];
u2 attributes_count;
attribute_info attributes[attributes_count];
}
๋ช
์ธ์์ u1, u2, u4๋ก ํ๊ธฐ๋ ๊ฒ์ ๊ฐ๊ฐ unsigned 1,2 4 ๋ฐ์ดํธ๋ฅผ ์๋ฏธํฉ๋๋ค. 2๋ฐ์ดํธ ์ด์์ ๋ฐ์ดํธ ์์๋ Java์ ๋ช
์ธ์ ๋ฐ๋ผ ๋คํธ์ํฌ ์์์ธ ๋น
์๋์์
๋๋ค.
์ ๊น ๊ณ๊ฐ์ง๋ก ๋ ํท๊ฐ๋ฆฌ๊ณ ๊ธฐ์ต์ด ๊ฐ๋ฌผํ ์ ์๋ ์๋์์ ๋ค์ ๋ ์ฌ๋ ค๋ด
์๋ค. ์๋์์ ๋ฐ์ดํธ ์์๋ก ์ปดํจํฐ ์ํคํ
์ณ๋ง๋ค ์ปดํจํฐ์์ ๋ฐ์ดํธ๋ฅผ ์ด๋ป๊ฒ ํํํ ๊ฒ์ธ๊ฐ๋ฅผ ๋ค๋ฃจ๋ ๊ท์น์
๋๋ค. ๋ฆฌํ์๋์์ ๋ฐ์ดํฐ์ ๋ฐ์ดํธ ๋ฐฐ์ด์์ ๋ฎ์ ๋ฐ์ดํธ๊ฐ ๋จผ์ ์ค๋ ๋ฐฉ์์
๋๋ค. ์๋ฅผ ๋ค๋ฉด 0x12345678 ๊ณผ ๊ฐ์ด 8๋ฐ์ดํธ ๋ฐ์ดํฐ๋ฅผ ๋ฆฌํ์๋์ ๋ฐฉ์์ผ๋ก ํํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
78 56 34 12
์ ๊ฐ ๊ธ์ ์ฐ๊ณ ์๋ ์ปดํจํฐ๋ ๋งฅ๋ถ์ด๊ณ Intel ์นฉ์
์ผ๋ก ๋ฆฌํ ์๋์์ ์ฌ์ฉํฉ๋๋ค. ๋ง์ฝ ๋ค์๊ณผ ๊ฐ์ endian.c์ฝ๋๋ฅผ ์ ์ปดํจํฐ์์ ์ปดํ์ผํ๋ค๊ณ ๊ฐ์ ํด ๋ด
์๋ค.
#include
int main() {
int myData = 0x12345678;
printf("Hello, c: %d", myData);
}
์ค๋๋ง์ c์ฝ๋๋ฅผ ํ ๋ฒ ์ปดํ์ผ ํด๋ด
์๋ค.
$ gcc -o endian endian.c
์ฝ๋์ ๋ฌธ์ ๊ฐ ์๋ค๋ฉด ์ ์์ ์ผ๋ก endian ๋ฐ์ด๋๋ฆฌ ํ์ผ์ด ์์ฑ๋ฉ๋๋ค. ์์ SimpleClass.class ์ ๋ด์ฉ์ ์กฐํํ๋ ๋ฐฉ์๊ณผ ๋์ผํ๊ฒ hexdump๋ฅผ ์ฌ์ฉํด ๋ด
์๋ค.
$ hexdump endian
๋์ ๋น๋น๊ณ ํฐ๋ฏธ๋ ์์ ๋ฐ์ดํธ ์ฝ๋๋ฅผ ์ ์ฐพ๋ค๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ด myData์ ๊ฐ 0x12345678 ์ ์ปดํ์ผ ํ ๋ฆฌํฐ๋ด๋ก ๋ฆฌํ ์๋์ ๋ฐฉ์์ผ๋ก ํํ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
0000f60 45 fc 78 56 34 12 8b 75 fc b0 00 e8 0e 00 00 00
0f62~0f65 ์ฃผ์(์ด ์ฃผ์๋ ์ปดํ์ผ ํ๊ฒฝ์ ๋ฐ๋ผ ๋ค๋ฅผ ์ ์์ต๋๋ค.)์ ๋ฐ์ดํฐ๊ฐ ์ ๋งmyData์ ๊ฐ 0x12345678 ์ธ์ง ์์ฌ์ด ๊ฐ๋ ๋ถ๋ค์ ์ฝ๋๋ฅผ ์์ ํ์ฌ ์์ ํ ๊ฐ์ด ๋์ผํ ์์น์ ๋ฐ์๋์๋์ง ํ์ธํด ๋ณผ ์ ์์ต๋๋ค.
๋ค์ ๋ณธ๋ก ์ผ๋ก ๋์์์ Java๋ ๋น
์๋์ ๋ฐฉ์์ด๊ธฐ ๋๋ฌธ์ ๋ถ๋ช
๋ฐ์ดํธ ์ฝ๋ ์ด๋๊ฐ์ myData์ ๊ฐ 0x12345678 ๊ฐ ์์๋๋ก 12 34 56 78๋ก ํํ๋์ด ์๋ค๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค. ๊ทธ๋ฐ๋ฐ JVM ๋ช
์ธ์ ์ ์ธ๋ ํด๋์ค ํฌ๋งท์ ํ ๋ ํ ๋ ๋ฐ์ดํธ์ ๋น๊ตํ๊ธฐ๊ฐ ์ฝ์ง ์์ต๋๋ค.
๋คํํ javap๋ช
๋ น์ ์ฌ์ฉํ๋ฉด ๋ฐ์ดํธ์ฝ๋์ ๋ด์ฉ์ ํด๋์ค ํฌ๋งท์ ๋ง๊ฒ ๋ณํํด์ ๋ณด์ฌ์ค๋๋ค. ๋ค์ ๋ช
๋ น์ ์ฌ์ฉํ์ฌ ์ข ๋ ์ฝ๊ฒ SimpleClass.class ์ ๋ฐ์ดํธ์ฝ๋๋ฅผ ๋ถ์ํด ๋ด
์๋ค.
$ javap -verbose SimpleClass
๋ช
๋ น์ ์คํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด SimpleClass.class ์ ๋ฐ์ดํธ์ฝ๋๋ฅผ JVM๋ช
์ธ์ ํด๋์ค ํฌ๋งท์ ๋ง์ถฐ ์ข ๋ ์ดํดํ๊ธฐ ์ฌ์ด ๋ด์ฉ์ผ๋ก ๋ณด์ฌ์ค๋๋ค.
Classfile (์ฝ๋์ ํด๋ path)/SimpleClass.class
Last modified Mar 4, 2018; size 677 bytes
MD5 checksum af7b08791de4e6858436f2a929707744
Compiled from "SimpleClass.java"
public class SimpleClass
minor version: 0
major version: 52
flags: ACC_PUBLIC, ACC_SUPER
Constant pool:
#1 = Methodref #13.#22 // java/lang/Object."":()V
#2 = Fieldref #23.#24 // java/lang/System.out:Ljava/io/PrintStream;
#3 = String #25 // Deep dive into Java
...
๋ณํ๋ ๋ด์ฉ์ค minor version, major version์ ๋ด
์๋ค. ๊ฐ๊ฐ 0, 52๋ก ์ ํ ์์ต๋๋ค. ๋ฐ์ดํธ ์ฝ๋๋ ์ฒ์ 4๋ฐ์ดํธ์ ๋งค์ง๋๋ฒ ๋ค์์ผ๋ก 2๋ฐ์ดํธ์ฉ ๋ง์ด๋ ๋ฒ์ ๊ณผ ๋ฉ์ด์ ๋ฒ์ ๊ฐ์ ๊ฐ์ต๋๋ค. ์์์ ์ ์ ์ดํด๋ณธ SimpleClass.class์ ๋ฐ์ดํธ ์ฝ๋ ์ฒซ๋ฒ์งธ ์ค๋ง ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
0000000 ca fe ba be 00 00 00 34 00 2e 0a 00 0d 00 16 09
ca fe ba be ๋ค์์ผ๋ก ๋ง์ด๋ ๋ฒ์ ์ ํด๋นํ๋ ๋๋ฐ์ดํธ 00 00, ๋ฉ์ด์ ๋ฒ์ ์ ํด๋นํ๋ 00 34๋ฅผ ํ์ธํ ์ ์์ต๋๋ค. ๋ฉ์ด์ ๋ฒ์ ์ ๊ฐ์์ ํผ๋ํ์ง ๋ง์์ผ ํ ๊ฒ์ 34๋ 16์ง์์ด๋ฏ๋ก 16^1 * 3 + 16^0 + 4 = 52์ด๋ผ๋ ๊ฒ์
๋๋ค.
Java 1.1์ด ๋ฉ์ด์ ๋ฒ์ 45์ด๊ณ ๋ฒ์ ์ ํ๋์ฉ ์ฆ๊ฐํฉ๋๋ค. ๋ฐ๋ผ์ ๋ฉ์ด์ ๋ฒ์ 52๋ ์ค์ Java 8์ ์๋ฏธํ๊ณ ํ์ฌ ์ต์ ๋ฒ์ ์ธ Java 9 ๋ 53์ด ๋ฉ๋๋ค. ๊ฐํน ํ๋ก์ ํธ๋ฅผ IDE์์ ์คํํ ๋ ์ด๋ฐ ์์ธ๋ฅผ ๋ณผ๋๊ฐ ์ข ์ข ์์ต๋๋ค.
Java Exception : Unsupported major.minor version 52.0
์ ์์ธ์ ์ด์ ๋ฅผ ์ด์ ์์๊ฒ ๋์? ์ด ์์ธ๋ ์์ ๋ฒ์ ์์ ์ปดํ์ผํ ๋ฐ์ดํธ์ฝ๋๋ฅผ ํ์ ๋ฒ์ ์ JVM์์ ์คํํ ๋ ๋ฐ์ํ๋ ์์ธ์
๋๋ค.
์ค๋์ Steem ์ฒซ ์ฐ์ฌ๊ธ๋ก Java์ ํด๋์ค๋ฅผ ์ดํด๋ณด์์ต๋๋ค. ์ค์ ์ฝ๋๋ฅผ ์ปดํ์ผํ๊ณ ๋ฐ์ดํธ์ฝ๋๋ฅผ JVM์ ๋ช
์ธ์ ๊ธฐ์ ๋ ํด๋์คํฌ๋งท์ ์ฐธ์กฐํ๋ฉด์ ์ดํดํด ๋ณด์์ต๋๋ค. ๋๋ถ์ด ๋ฐ์ดํธ ์์๋ ๋ค์ ์ดํด๋ณด์์ต๋๋ค. ๋ค์์๋ ์ค๋ช
ํ์ง ๋ชปํ ๋ฐ์ดํธ์ฝ๋ ์ผ๋ถ๋ฅผ ๋ค๋ฃจ๊ณ ํด๋์ค๋ก๋๋ฅผ ๋ ์์๋ณด๊ณ ์ ํฉ๋๋ค.