Object란?

Object

  • class 키워드 대신 object 키워드를 사용하여 Singleton을 생성한다.
  • 일반 클래스처럼 필드, 메서드, 초기화 블록을 가질 수 있지만 생성자는 가질 수 없다.
  • Object 선언1, Object 식2, Companion Object에 이용된다.
  • 클래스를 상속 받을 수 있고, 여러 개의 인터페이스를 구현할 수 있다. 다른 클래스가 Object를 상속할 수는 없다.

원리

  • 내부적으로 일반적인 Singleton 패턴과 같이 구현된다.
  • Kotlin의 Object는 Java에서 아래와 같이 변환된다.
      // Kotlin 코드
      object ExampleObject {
          val exampleField = 0
          fun exampleFunction() {}
      }
    
      // 위의 Kotlin 코드가 변환된 Java 코드
      public final class ExampleObject {
          // 객체를 상수로 선언한다. Kotlin에서 Object를 호출하면 이 객체를 전달한다.
          @NotNull
          public static final ExampleObject INSTANCE;
        
          // Object의 멤버는 위의 객체를 통해 접근한다.
          private static final int exampleField;
          public final int getExampleField() {
              return exampleField;
          }
           
          public final void method() {}
        
          // 생성자를 호출할 수 없다.
          private ExampleObject() {}
        
          // 객체는 정적 블럭을 통해 초기화된다.
          static {
              ExampleObject var0 = new ExampleObject();
              INSTANCE = var0;
          }
      }
    


1클래스 내부에 선언할 경우 Java의 Static Inner Class, 메서드 내에서 선언할 경우 Local Inner Class처럼 동작한다.
2Object를 반환하는 식. 익명 Object를 생성하는 경우 Java의 Anonymous Inner Class처럼 동작한다.