-
[Java-2] 바이트 코드란Java 2020. 11. 9. 21:15
전 글에서는 JAVA의 컴파일 과정을 자세하면서, 자세하지 않게 다뤄 보았다. 이번에는 컴파일이 되었을 때 생성되는
중간코드(바이트 코드) 에 대해서 알아보도록 하자.
1. 중간코드(바이트 코드)가 뭐여 도대체
JAVA가 나왔을 당시, 기존 C언어 하고는 꽤나 다른 실행 과정을 가졌다.
간단하게 살펴보면, 중간코드는 JVM 이 읽을 수 있는 언어라고 생각하면 된다. JVM에서는 이 중간 코드를 바이트코드 라고 하는데, (지금부터 중간코드를 바이트코드라고 적겠습니다.)
JVM은 이 바이트코드를 읽어 들여서 컴퓨터 이해할 수 있는 언어로 변환한다. 필자의 개인적 의견 이지만, 바이트 코드는 JVM이 읽을 수 있는 언어로 정의하는 것이지만 더 재밌는 이야기를 해보자,
이것먼저 알아보도록 하자
JVM은 JAVA언어에서만 사용할까?
아니다. JVM은 자바언어 에서만 사용하지 않는다.
대표적으로 스칼라, JRUBY, 코틀린도 JVM 이라는 가상 환경 안에서 놀고 있다.
이 4가지 언어들은 무조건 실행하기전에 컴파일 과정에서, 바이트 코드로 번역되는 과정을 가진다.
그래서 인지 모르겠지만, Java 프로젝트에 코틀린을 물려서 사용하는 걸 몇번 본적이 있다. 그래서 혹시나 해서 알아봤는데, 스칼라도 자바랑 함께 한 프로젝트 안에서 알콩달콩 컴파일이 된다는걸 알 수 있다.
javap를 사용해서 확인한 바이트 코드의 모습이다. 이 javap는 JDK의 개발툴인데, JDK, JRE, JVM에 대해서는 뒤에서 다뤄보도록 하자.
javap는 간단하게, 바이트 코드를 우리가 볼 수 있게 바꾸어 주는 프로그램이라고 생각하자, 바이트 코드를 이렇게만 정의하기에는 뭔가 아쉽다.
2. OK 알았어 , 그럼 바이트코드로 할 수 있는게 뭐가있어?
프로그램 분석
-
코드에서 버그 찾는 툴
-
코드 복잡도 계산
클래스 파일 생성
-
프록시
-
특정 API 호출 접근 제한
-
스칼라 같은 언어의 컴파일러 만들기
출처 : 더 자바 코드를 조작 하는 다양한 방법 강의자료
3. 바이트 코드를 배워야 하는거야?
그거 몰라도 문법알고 잘짜기 만 하면 되는거 아녀?
이건 사실 잘 모르겠다. 바이트 코드를 직접 다루어 본적도 없고, 다뤄볼 일도 없었기 때문이다.
근데, 그래서 공부 안할건가?
도대체 어떤 언어를 사용 하든, API를 사용 하든, 내부적으로 어떻게 돌아가는지 모르면 그 기술을 안다고 할 수 있을까.. 조심스럽게 생각해본다.
자바 바이트 코드를 조작하는 방법은 여러 방법이 있는데, 내 블로그 보다 더 훌륭한 강의가 있다.
더 자바 코드를 조작 하는 다양한 방법 중 2강 바이트코드 조작에서 46분 동안 바이트코드를 다루는 여러가지 방법을 소개한다.
'Java' 카테고리의 다른 글
[Java-4] JVM의 구조 (1) 2020.11.11 [Java-3] JVM과 JIT 컴파일러란? (2) 2020.11.10 [Java-1] 컴파일 방법 & 과정 (14) 2020.11.09 함수형 인터페이스란? (0) 2020.10.27 NullPointerException(NPE) 필요한 이유 (0) 2020.10.20 -