Kotlin Object, Companion Object, Anonymous Object
포스트
취소

Kotlin Object, Companion Object, Anonymous Object

Object

  • Kotlin에서는 language-level에서 singleton pattern이 지원된다
  • class 대신, object 키워드를 사용하여 선언하면 그 object는 singleton이 된다
1
2
3
    object CarFactory {
        fun makeCar(...) { ... }
    }

Companion Object

  • singleton instance보다는 class의 static method를 선언하고 싶을 때는, companion object를 활용할 수 있다
1
2
3
4
5
6
7
8
9
10
11
    class Car {
        // 이름은 optional
        // companion object {
        companion object Factory { 
            fun makeCar(...) { ... }
        }
    
        companion object {
            fun makeCar(...) { ... }
        }
    }
  • companion object는 singleton이지만, 멤버들은 class name을 통해 접근 될 수 있다
  • companion object name을 통해서도 접근할 수 있다
1
2
    Car.makeCar(...)
    Car.Factory.makeCar(...)
  • companion object는 상속도 가능하다
1
    companion object Factroy : FactoryBase

@JvmStatic

  • Java static method로 만드려면, member에게 @JvmStatic annotation을 붙이면 된다

  • A class는 오직 하나의 companion object를 가질 수 있고, 이들은 중첩될 수 없다

overridable Class-level function in a subclass

  • companion object의 멤버들은 class name을 통해서만 접근 가능하고, instance를 통해서는 접근 불가능하다
  • Kotlin은 overridable class-level function in a subclass을 지원하지 않는다
    • subclass에서 companion object를 재선언하면, base class의 것은 가려진다


  • overridable class-level function이 필요하다면 (instance를 통해 호출 시 override된 것이 호출되게 하고 싶다면)
  • open function사용하라
  • 이러한 구현이 가능하긴 하지만 inconvenient임을 인지할 것

open 은 subclassing 또는 overriding을 가능하게 한다

Object Expression

  • java에서 interface를 parameter로 가지는 function을 호출할 때, object expression을 사용할 수 있다
  • 즉, anonymous object를 다음과 같이 선언할 수 있다
1
    start(object : Vehicle { override ... }
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.

UUID란? UUID 정의 (aka GUID)

RDBMS Schema란 무엇인가