TIL

Lec 12. 코틀린에서 object 키워드를 다루는 방법

1. static 함수와 변수

class Person private constructor(
  var name: String,
  var age: Int
) {
  companion object {
    private const val MIN_AGE = 0
    fun newBaby(name: String): Person {
      return Person(name, MIN_AGE)
    }
  }
}
class Person private constructor(
  var name: String,
  var age: Int
) {
  companion object Factory : Log {
    private const val MIN_AGE = 0
    fun newBaby(name: String): Person {
      return Person(name, MIN_AGE)
    }
    
    override fun log() {
      // ...
    }
  }
}

2. 싱글톤

object Sigleton {
  var a: Int = 0
}

fun main() {
  println(Singleton.a)
}

3. 익명 클래스

interface Movable {
  fun move()
  fun fly()
}

fun main() {
  moveSomething(object : Movable { // object 키워드 사용
    override fun move() {
      println("...")
    }
    
    override fun fly() {
      println("...")    
    }
  })
}

private fun moveSomething(movable: Movable) {
  movable.move()
  movable.fly()
}