글을 보시기 전에 JVM에 대해 적은 포스트를 한 번 참고하시는 것이 좋을 것 같습니다.
1. ByteCode
먼저 바이트 코드는 특정 하드웨어가 아닌 가상 컴퓨터에서 돌아가는 실행 프로그램을 위한 이진 표현법으로 쉽게 말해 컴퓨터가 이해하기 쉽도록 컴퓨터 중심적인 코드입니다.(반대로는 사람이 읽기 쉽도록 쓰인 소스코드)
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 |