더북(TheBook)

2.2.7 정적 메서드 구현하기

코틀린 클래스에는 정적 멤버가 없다. 그 대신 동반 객체(companion object)라는 특별한 요소를 사용해 같은 효과를 얻을 수 있다.

data class Person(val name: String, val registered: Instant = Instant.now()) {
    companion object {
        fun create(xml: String): Person {
            TODO("Write an implementation creating " + "a Person from an xml string")
        }
    }
}

자바 정적 멤버를 호출할 때처럼 create 함수를 호출할 수 있다.

Person.create(someXmlString)

동반 객체를 지정해 명시적으로 create를 호출할 수도 있다. 하지만 이런 방식은 낭비다.

Perso.Companion.create(someXmlStrig)

반대로 이 함수를 자바 코드에서 사용하려면 동반 객체를 지정해 함수를 호출해야 한다. 하지만 동반 객체가 들어 있는 외부 클래스의 정적 멤버로 이 함수를 호출하고 싶으면 이 코틀린 함수 앞에 @JvmStatic 애너테이션을 붙여야 한다. 자바 코드에서 코틀린 코드를 호출하는 방법(그리고 역으로 코틀린에서 자바 코드를 호출하는 방법)은 부록 A를 보라.

여기서 예기치 않게 코틀린이 제공하는 TODO 함수를 사용했다. 이 함수는 코드를 더 일관성 있게 만든다. 이 함수는 실행 시점에 예외를 발생시켜 해야 할 작업이 남아 있음을 여러분에게 상기시켜준다!

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.