ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java-2] 바이트 코드란
    Java 2020. 11. 9. 21:15

    전 글에서는 JAVA의 컴파일 과정을 자세하면서, 자세하지 않게 다뤄 보았다. 이번에는 컴파일이 되었을 때 생성되는

    중간코드(바이트 코드) 에 대해서 알아보도록 하자.

     

    1. 중간코드(바이트 코드)가 뭐여 도대체

     

    JAVA가 나왔을 당시, 기존 C언어 하고는 꽤나 다른 실행 과정을 가졌다.

    간단하게 살펴보면, 중간코드는 JVM 이 읽을 수 있는 언어라고 생각하면 된다. JVM에서는 이 중간 코드를 바이트코드 라고 하는데,  (지금부터 중간코드를 바이트코드라고 적겠습니다.)

     

    JVM은 이 바이트코드를 읽어 들여서 컴퓨터 이해할 수 있는 언어로 변환한다. 필자의 개인적 의견 이지만, 바이트 코드는 JVM이 읽을 수 있는 언어로 정의하는 것이지만 더 재밌는 이야기를 해보자, 

     

    이것먼저 알아보도록 하자

     

    JVM은 JAVA언어에서만 사용할까?

    아니다. JVM은 자바언어 에서만 사용하지 않는다.

    대표적으로 스칼라, JRUBY, 코틀린도 JVM 이라는 가상 환경 안에서 놀고 있다. 

     

    JVM을 사용하는 대표 적인 언어 4가지 이다.

     

    이 4가지 언어들은 무조건 실행하기전에 컴파일 과정에서, 바이트 코드로 번역되는 과정을 가진다.

     

    이 3개 모두 컴파일 하면, 중간코드로 생성되게 된다. 

    그래서 인지 모르겠지만, Java 프로젝트에 코틀린을 물려서 사용하는 걸 몇번 본적이 있다. 그래서 혹시나 해서 알아봤는데, 스칼라도 자바랑 함께 한 프로젝트 안에서 알콩달콩 컴파일이 된다는걸 알 수 있다. 

     

    다음은 실제 .class 파일을 바이트 코드로 보여진 화면이다.

     

    javap를 사용해서 확인한 바이트 코드의 모습이다. 이 javap는 JDK의 개발툴인데, JDK, JRE, JVM에 대해서는 뒤에서 다뤄보도록 하자. 

     

    javap는 간단하게, 바이트 코드를 우리가 볼 수 있게 바꾸어 주는 프로그램이라고 생각하자, 바이트 코드를 이렇게만 정의하기에는 뭔가 아쉽다.

     

    2. OK 알았어 , 그럼 바이트코드로 할 수 있는게 뭐가있어?

     

     

    프로그램 분석

    • 코드에서 버그 찾는 툴

    • 코드 복잡도 계산

    클래스 파일 생성

    • 프록시

    • 특정 API 호출 접근 제한

    • 스칼라 같은 언어의 컴파일러 만들기

    출처 : 더 자바 코드를 조작 하는 다양한 방법 강의자료 

     

    3. 바이트 코드를 배워야 하는거야?

    그거 몰라도 문법알고 잘짜기 만 하면 되는거 아녀?

     

    이건 사실 잘 모르겠다. 바이트 코드를 직접 다루어 본적도 없고, 다뤄볼 일도 없었기 때문이다.

    근데, 그래서 공부 안할건가? 

     

    도대체 어떤 언어를 사용 하든, API를 사용 하든, 내부적으로 어떻게 돌아가는지 모르면 그 기술을 안다고 할 수 있을까.. 조심스럽게 생각해본다. 

     

    자바 바이트 코드를 조작하는 방법은 여러 방법이 있는데, 내 블로그 보다 더 훌륭한 강의가 있다. 

     

    더 자바 코드를 조작 하는 다양한 방법 중 2강 바이트코드 조작에서 46분 동안 바이트코드를 다루는 여러가지 방법을 소개한다.

     

    > [Java-3] JVM과 JIT 컴파일러란?

    'Java' 카테고리의 다른 글

    [Java-4] JVM의 구조  (1) 2020.11.11
    [Java-3] JVM과 JIT 컴파일러란?  (2) 2020.11.10
    [Java-1] 컴파일 방법 & 과정  (13) 2020.11.09
    함수형 인터페이스란?  (0) 2020.10.27
    NullPointerException(NPE) 필요한 이유  (0) 2020.10.20

    댓글

Designed by Tistory.