더북(TheBook)

클래스에 주생성자가 있다면, (부생성자가 있는 경우) 모든 부생성자는 주생성자에게 위임을 하거나 다른 부생성자에게 위임을 해야 한다. 예를 들어 앞의 예제에서 두 번째 생성자를 주생성자로 바꿀 수 있다.

class Person(val fullName: String) {
  constructor(firstName: String, familyName: String):
    this("$firstName $familyName")
}

부생성자의 파라미터 목록에는 val/var 키워드를 쓸 수 없다는 점에 유의하자.

class Person {
  // error: 'val' on secondary constructor parameter is not allowed 
  constructor(val fullName: String) 
}

부생성자와 클래스 상속이 결합되는 경우, 상위 클래스 생성자를 호출하는 것과 관련된 다른 문제가 있다. 이에 대해서는 8장 클래스 계층 이해하기에서 살펴본다.

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