더북(TheBook)

클래스 안에 init 블록이 여럿 들어갈 수 있다. 이런 경우 각 블록은 프로퍼티 초기화와 함께 순서대로 실행된다.

초기화 블록에는 return 문이 들어가지 못한다는 점에 유의하라.

class Person(firstName: String, familyName: String) {
  val fullName = "$firstName $familyName"
  
  init {
    // error: 'return' is not allowed here
    if (firstName.isEmpty() && familyName.isEmpty()) return 
    println("Created new Person instance: $fullName")
  }
}

지금까지는 항상 프로퍼티 값을 프로퍼티 정의 시 초기화했다. 하지만 하나의 식으로 표현하기 어려운 복잡한 초기화 로직을 실행해야 프로퍼티를 초기화할 수 있는 경우도 있다. 이런 이유로 코틀린은 init 블록 안에서 프로퍼티를 초기화하는 것도 허용한다.

class Person(fullName: String) {
  val firstName: String
  val familyName: String
  init {
    val names = fullName.split(" ")
    if (names.size != 2) {
      throw IllegalArgumentException("Invalid name: $fullName")
    }
    firstName = names[0]
    familyName = names[1]
  }
}

fun main() {
  val person = Person("John Doe")
  println(person.firstName) // John
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.