Skills/Java

Java - 바이트 코드

aoaa 2022. 9. 20. 18:56

 글을 보시기 전에 JVM에 대해 적은 포스트를 한 번 참고하시는 것이 좋을 것 같습니다.

 


1. ByteCode 

 먼저 바이트 코드는 특정 하드웨어가 아닌 가상 컴퓨터에서 돌아가는 실행 프로그램을 위한 이진 표현법으로 쉽게 말해 컴퓨터가 이해하기 쉽도록 컴퓨터 중심적인 코드입니다.(반대로는 사람이 읽기 쉽도록 쓰인 소스코드)

  

http://www.tcpschool.com/java/java_intro_programming

  Java에서는 Java 클래스 파일(.java)을 Java 컴파일러에서 JVM이 이해할 수 있는 Java bytecode(.class)로 변환합니다. 

터미널에서 java 코드를 간단하게 작성한 뒤, 바이트 코드를 확인해볼 수 있습니다.

 


2. Code Coverage

 코드 커버리지란 테스트 코드가 실행될 때 얼마나 많은 코드가 실행되었나(충족)를 나타내는 지표로 이를 수치로 확인할 수 있는 방법입니다. 

 저는 Jacoco라는 코드 커버리지 라이브러리를 통해 확인해봤습니다. 먼저 build.gradle에 추가해준 뒤, Test를 실행하면

 index.html이라는 파일이 생성되는데, 이를 브라우저에서 실행해보면

 위와 같이 커버리지를 확인할 수 있습니다. 

플러그인 하나 추가로 .java와 .class파일 변경 없이 테스트가 이루어졌는디 확인 가능한 이유는 

JVM의 Heap 영역에 클래스 정보가 올라가기 전에, 클래스 로드 시점에 인터셉트하여 바이트 코드를 조작하기 때문입니다. 

 

 이 바이트 코드는 클래스라 로딩되기 직전에도 이미 컴파일 단계에서 .class파일이 만들어지기 때문에 조작이 가능하며, 이처럼 기존 코드를 건드리지 않으며 추가 목적을 달성하는 것을 Transparent하다고 합니다.

 

 

 

 

 

참조

더보기

'Skills > Java' 카테고리의 다른 글

Java - JDBC  (0) 2022.10.04
Java - equals(), hashcode() 메서드의 사용  (0) 2022.10.01
Java - JVM & Garbage Collector  (0) 2022.09.16
Java - static import  (0) 2022.08.29
Java - 추상 클래스와 인터페이스  (0) 2022.08.23