이런 경우 별도로 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}") }