Kotlin
[Kotlin] object는 어떻게 자바로 디컴파일 되는가
Nhahan
2025. 3. 27. 21:31
object Member {
private const val name: String = "John Park"
val age: Int? = 22
var address: String = "Seoul"
fun sayHello() {
println("Hello, $name!")
}
}
이러한 Kotlin코드는 아래와 같은 Java 코드로 변환된다.
public final class Member {
@NotNull
public static final Member INSTANCE = new Member();
@NotNull
private static final String name = "John Park";
@Nullable
private static final Integer age = 22;
@NotNull
private static String address = "Seoul";
private Member() {
}
@Nullable
public final Integer getAge() {
return age;
}
@NotNull
public final String getAddress() {
return address;
}
public final void setAddress(@NotNull String var1) {
Intrinsics.checkNotNullParameter(var1, "<set-?>");
address = var1;
}
public final void sayHello() {
String var1 = "Hello, John Park!";
System.out.println(var1);
}
}
- object는 상속, override가 불가능하므로, 모든 것이 final로 선언된다.
- 싱글턴 객체 이므로 static final Member INSTANCE가 선언되고, private 생성자가 생긴다.
- nullable한 타입은 @Nullable, null이 불가한 타입은 @NotNull 어노테이션이 붙는다.
- val은 final이 붙고, var는 붙지 않는다.
- const로 선언된 필드는 컴파일 타임 상수로 취급되며, 그 값이 사용되는 모든 곳에 인라이닝 된다. (getter 없음)