Kotlin 코드를 Java 코드로 디컴파일(Decompile) 하는 방법

 

 

문제 상황

자바 코드를 코틀린 코드로 마이그레이션 하는 과정에서 "이거 자바 코드로 바꾸면 어떻게 되지?" 라는 의문이 들었다.

 

특히 상수 선언 방법이 2개인 코틀린에서 companion object, const 를 각각 사용하여 상수 선언 시

둘의 결과는 같은 지, 아니면 내가 아는 것과 조금 다르게 동작할 지에 대한 의문으로 디컴파일 방법을 탐색하여 알게 되었다.

 

 


 

Kotlin to Java 디컴파일(Decompile)이란?

Kotlin 을 Java로 디컴파일 한다는 것은

Kotlin으로 작성된 언어를 .class 파일로 컴파일한 다음, 다시 Java로 디컴파일을 수행한다는 것을 의미한다.

 

결국 Kotlin으로 작성된 코드가 Java로 보면 어떤 지 확인할 수 있기 때문에 Java -> Kotlin 마이그레이션 상황에서 굉장히 유용하게 사용할 수 있다.

 

 


 

방법

IntelliJ는 JetBrains에서 만들었다.

Kotiln 또한 JetBrains에서 만든 언어이다.

때문에 JetBrains에선 Kotlin 언어에 대한 지원이 풍족한데, 이 기능 또한 IntelliJ에서 제공하는 기능이다.

 

 

 

IDE 화면에서 shift를 2번 연속으로 누르게 되면 위와 같은 입력창이 나타난다.

여기서 show kotlin bytecode 를 검색하게 되면 위와 같은 기능이 보여진다.

 

한 번 선택해보자.

 

 


그럼 위와 같이 화면 우측에 Decompile 버튼이 나타나는데, 클릭해보자

 

 

(좌) Kotlin 코드 / (우) Decompile된 코드

 

그럼 위와 같이 Kotlin 코드가 class 파일로 컴파일되었다가, 다시 Java 코드로 디컴파일된 위와 같은 결과를 얻을 수 있다.

 

이를 통해 내가 작성한 Kotlin 코드가 Java에선 어떨지 확인하여 내가 의도한 코드가 맞는 지 확인하면서 마이그레이션을 진행할 수 있게 된다.