더북(TheBook)

이런 경우 별도로 import Application.Factory.create로 팩토리 메서드를 임포트하지 않는 한 매번 내포된 객체의 이름을 지정해야 한다. 코틀린에서는 Factory 메서드를 동반 객체(companion object)로 정의함으로써 이런 문제를 해결할 수 있다. 동반 객체는 companion이라는 키워드를 덧붙인 내포된 객체다. 이 객체는 다른 내포된 객체와 마찬가지로 작동하지만 한 가지 예외가 있다. 동반 객체의 멤버에 접근할 때는 동반 객체의 이름을 사용하지 않고 동반 객체가 들어있는 외부 클래스의 이름을 사용할 수 있다. 동반 객체를 사용하면 앞에서 본 예제를 좀 더 간결하게 작성할 수 있다.

class Application private constructor(val name: String) {
  companion object Factory {
    fun create(args: Array<String>): Application? {
      val name = args.firstOrNull() ?: return null
      return Application(name)
    }
  }
}

fun main(args: Array<String>) {
  val app = Application.create(args) ?: return
  println("Application started: ${app.name}")
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.