Day05 Bytecode작성 및 Java실습(class,main())
(네이버클라우드 부트캠프) 5일차 - Bytecode작성 및 Java실습(class,main())
1. Bytecode작성
1.1 Sublime 설치
- 16진수 코드 작성을 위해 sublime 설치
1.2 Bytecode 작성
- 참고 레퍼런스 : Java Specification(21 version)
- Java Class File 구조
- 기본 구조 작성
1 2 3 4 5 6 7 8 9
Java File: CAFE BABE Version 8: 0000 0034 Constant Pool Size of ZERO: 0000 Super Public: 0021 Unknown index of class in constant pool: 0000 Unknown index of super class in constant pool: 0000 zero interfaces: 0000 zero fields: 0000 zero methods: 0000
- 터미널에서 javap를 실행하면 다음과 같은 결과가 나온다.
- 이는 class를 설정 하지 않았다는 의미이다.
- class 설정하기
1 2 3 4
0003 // 총 3줄의 constant pool(tag 1줄 포함)을 생성 07 0002 // 07의 코드는 클래스를 의미하고 2바이트 크기의 UTF-8의 할당 01 000a // 01은 UTF-8을 사용한다는 의미이고 0xa는 10개 글자를 할당 48 65 6c 6c 6f 57 6f 72 6c 64 // UTF-8의 아스키 코드 값("HelloWorld")
- super class생성
- java에는 root에 해당하는 class를 super class라고 부른다.
1
2
3
0700 04 // class 생성 2바이트(처음 2바이트 + 금번 2바이트)
0100 10 // 16자 UTF-8 입력
6a 61 76 61 2f 6c 61 6e 67 2f 4f 62 6a 65 63 74 // java/lang/Object (super class 의 위치)
- main 함수 생성
1 2 3
static void main(String[] args){ System.out.println("Hello World"); }
- main 함수를 만들기 위해서는 println의 위치가 필요 : ([Ljava/lang/String;)V. 를 활용하여 메소드 이름과 리턴값을 받는다
- “Hello World”라는 문자열을 추가 : attribute Code를 통해 UTF-8의 문자열을 받는다.
1
2
0700 06
0100 10 6a 61 76 61 2f 6c 61 6e 67 2f 53 79 73 74 65 6d
- out 변수 설정 : 불러온 변수들을 연결 해줘야 한다.
1 2 3 4
0900 0500 0c 0c00 0d00 0e 0100 03 6f 75 74 0100 15 4c 6a 61 76 61 2f 69 6f 2f 50 72 69 6e 74 53 74 72 65 61 6d 3b
- main과 출력하기 연결
```plaintext // println과 연결
0a00 0700 10
0c00 1100 12
0100 07 70 72 69 6e 74 6c 6e
0100 15 28 4c 6a 61 76 61 2f 6c 61 6e 67 2f 53 74 72 69 6e 67 3b 29 56
// main과 연결
0100 04 6d 61 69 6e
0100 16 28 5b 4c 6a 61 76 61 2f 6c 61 6e 67 2f 53 74 72 69 6e 67 3b 29 56
0100 04 43 6f 64 65
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

#### 1.3 결론
- 하지마라, 걍 java로 소스파일을 만들어라
### 2. Java실습하기
#### 2.1 프로그램 언어의 발전과정
- 단순 명령문 코드를 구조화 하는 방향으로 발전
- 명령문 >> 함수 >> 클래스 >> 패키지 >> 모듈

- C언어 : 여러개의 소스파일 컴파일 하여 오브젝트 파일 생성 >> 링커를 통해 실행 파일 생성

#### 2.2 Java로 컴파일 하기
- Java 언어 : 하나의 소스파일에서 각 클래스의 파일을 컴파일 하여 각 클래스 파일을 생성

- 다음 코드를 컴파일 하면 3개의 class파일이 생성된다.
```java
class A {
}
class B {
}
class C {
}
2.2 Filename과 public의 관계
- Filename과 public은 일치해야한다(규칙)
- 동일하지 않으면 오류가 발생한다.
2.3 Entry point : main() 메서드
- main() 메서드의 개념 : 시작점
- main의 형식
1
public static void main(String[] 변수명)
1
2
3
class Test4 {
static void main(String[] a) {}
}
- main의 형식을 지키지 않으면 main을 찾기 못해서 컴파일은 가능하나, JVM에서 실행을 할 수가 없다.
2.3 Application argument : args
- main의 parmeter과 args의 관계
- 변수 args를 application argurment로 넘기면 String 배열에 변수 args를 parameter로 받는다.
- 응용 : String[]에 여러개의 Application Args를 넘겨 출력하기.
1 2 3 4 5 6 7
class Test6 { public static void main(String[] args) { for (String it : args) { System.out.println("'" + it + "'"); } } }
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.