[ASM] 클래스 - 구조
참조: http://download.fr.forge.objectweb.org/asm/asm-guide.pdf
컴파일 된 클래스 구성요소
- 클래스의 접근자, 이름, 상위 클래스, 인터페이스, 애노테이션
- 클래스에 선언한 필드당 한 섹션. 각 섹션에는 필드의 접근자, 이름, 타입, 애노테이션
- 클래스의 메서드와 생성자 당 한 섹션. 각 섹션에는 접근자, 이름, 반환 타입, 매개변수 타입, 애노테이션, 컴파일된(바이트) 코드
소스와 컴파일된 클래스와 차이
- 컴파일된 클래스는 오직 한 클래스에 대한 정보만 나타내지만 소스는 여러 클래스 가질 수 있다.
- 컴파일된 클래스는 주석을 가지고 있지 않다. 하지만 애노테이션에 부가 정보를 담을 수 있다. 그 전에는 클래스, 메서드, 필드, 코드의 attibutes 속성에 부가 정보를 전달했지만 이젠 별로 쓸 일 없다.
- 컴파일된 클래스는 package나 import 섹션이 없다. 모든 타입 이름이 전체 경로를 가지고 있다.
- 컴파일된 클래스는 constatnt pool 섹션을 가지고 있다.
internal name
- 클래스 또는 인터페이스 타입의 이름
- String -> java/lang/String
Type descriptor
- 자바 타입 서술자
boolean-> Z
char-> C
byte-> B
short-> S
int-> I
float-> F
long-> J
double-> D
Object-> Ljava/lang/Object;
int[]-> [I
Object[][]-> [[Ljava/lang/Object;
Method descriptor
- 메서드 서술자
void m(int I, float F) -> (IF)V
int m(Object o) -> (Ljava/lang/Object;)I
int[] m(int i, String s) -> (ILjava/lang/String;)[I
Object m(int[] i) -> ([I)Ljava/lang/Object;