클래스 안에 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
    }
    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.