JVM과의 연동 - swkim0128/PARA GitHub Wiki
tags:
- kotlin
- 코틀린 소스 파일 (
.kt
)은 컴파일러에 의해 JVM 바이트코드로 변환됩니다. - 이 JVM 바이트코드는 자바 컴파일러(
.java
→.class
)가 생성하는 바이트코드와 동일한 형식입니다. - 변환된 바이트코드는 JVM에서 실행됩니다.
- JVM은 하드웨어 및 운영체제에 독립적인 환경에서 바이트코드를 실행합니다.
- 코틀린의 JVM 바이트코드도 자바 바이트코드와 동일하게 JVM에 의해 실행됩니다.
- JVM은 코틀린과 자바 간의 상호 운용성을 보장합니다.
- 코틀린에서 자바 코드를 호출할 때, 자바 클래스와 메서드는 코틀린에서 마치 코틀린의 기본 문법처럼 사용할 수 있습니다.
- 예:
import java.util.Date
fun main() {
val date = Date() // 자바의 java.util.Date 클래스 사용
println(date)
}
- 자바에서 코틀린 코드를 호출할 수도 있습니다. 코틀린 컴파일러는 코틀린 코드를 자바 클래스와 메서드로 변환하여 자바 코드에서 사용할 수 있도록 합니다.
- 예: 아래의 코틀린 코드
// KotlinFile.kt
fun sayHello() {
println("Hello from Kotlin!")
}
컴파일 후 자바 코드에서 다음과 같이 호출할 수 있습니다:
public class Main {
public static void main(String[] args) {
KotlinFileKt.sayHello(); // Kotlin의 함수 호출
}
}
• 코틀린에서 자바와 더 효율적으로 상호 운용하기 위해 몇 가지 JVM 관련 어노테이션을 제공합니다 • @JvmStatic: 자바에서 호출할 수 있는 정적 메서드를 생성합니다. • @JvmOverloads: 기본 값을 가진 매개변수를 포함하는 메서드의 여러 버전을 생성합니다. • @JvmField: 자바에서 직접 접근 가능한 필드를 생성합니다.
• 코틀린의 데이터 타입은 JVM의 기본 타입 및 자바의 타입으로 매핑됩니다. • 예: • 코틀린의 Int → JVM의 int • 코틀린의 String → 자바의 String
• 코틀린은 Null 안전성을 보장하기 위해 자바의 null 허용 타입을 코틀린의 Nullable 타입으로 매핑합니다. • 자바 코드:
public String getName() {
return null; // null을 반환할 가능성이 있음
}
• 코틀린에서 호출 시:
val name: String? = javaCode.getName() // Nullable 타입으로 매핑
• 코틀린은 자바의 람다 표현식을 쉽게 호출할 수 있도록 지원합니다.
// Java 인터페이스
public interface Callback {
void execute();
}
코틀린에서 이를 람다로 간단히 표현 가능:
val callback = Callback { println("Executed!") }
- 기존 자바 코드 재사용: 자바 라이브러리, 프레임워크를 그대로 사용 가능.
- Interop 테스트: 코틀린과 자바 코드를 혼합해 사용하는 프로젝트에서 두 언어가 원활히 작동하도록 보장.
- 코드 마이그레이션: 기존 자바 프로젝트를 점진적으로 코틀린으로 전환 가능.
- 생산성 향상: 코틀린은 자바의 단순화된 문법과 더불어 현대적인 기능을 제공.
코틀린과 JVM의 연동 원리는 JVM 바이트코드와 공유되는 타입 시스템 덕분에 이루어지며, 코틀린이 자바와의 상호 운용성을 극대화할 수 있게 합니다. 이를 통해 코틀린은 자바 생태계를 활용하면서도 더욱 현대적이고 안전한 언어로 자리 잡을 수 있었습니다.