본문 바로가기
Kotlin

[Kotlin] object는 어떻게 자바로 디컴파일 되는가

by Nhahan 2025. 3. 27.

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 없음)

 

반응형

댓글