더북(TheBook)

4.1.2 생성자

생성자는 클래스 인스턴스를 초기화해주고 인스턴스 생성 시 호출되는 특별한 함수다. 다음 클래스를 보자.

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

class 키워드 이름 뒤에 덧붙인 파라미터 목록을 살펴보라. 이 파라미터는 프로그램이 클래스의 인스턴스를 생성할 때 클래스에 전달된다. 이 파라미터를 사용해 프로퍼티를 초기화하고 다른 일을 수행할 수 있다.

fun main() {
  val person = Person("John", "Doe") // 새 Person 인스턴스 생성
  println(person.fullName)           // John Doe
}

자바 vs. 코틀린 코틀린에서는 생성자를 호출할 때 (자바의 new와 같은) 특별한 키워드를 사용하지 않는다.

클래스 헤더의 파라미터 목록을 주생성자(primary constructor) 선언이라고 부른다. 주생성자는 함수와 달리 본문이 하나가 아니다. 대신 주생성자는 클래스 정의 내에서 프로퍼티 초기화와 초기화 블록이 등장하는 순서대로 구성된다. 초기화 블록이란 init이라는 키워드가 앞에 붙은 블록이다. 이 블록 안에서 클래스 초기화 시 필요한 간단하지 않은 초기화 로직을 수행할 수 있다. 예를 들어 다음 클래스는 주생성자가 호출될 때마다 메시지를 표시한다.

class Person(firstName: String, familyName: String) {
  val fullName = "$firstName $familyName"
  
  init {
    println("Created new Person instance: $fullName")
  }
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.