더북(TheBook)

다음 코드에서 firstNamefamilyName 프로퍼티는 private이므로 main() 함수에서 이 둘을 볼 수 없다. 반면 fullName()public이다.

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

fun main() {
  val person = Person("John", "Doe")
  // error: cannot access 'firstName': it is private in 'Person'
  println(person.firstName)  
  println(person.fullName()) // Ok
}

함수와 프로퍼티, 주생성자, 부생성자에 대해 가시성 변경자를 지원한다. 함수와 프로퍼티, 주생성자/부생성자는 모두 클래스 본문에 정의되거나 주생성자 파라미터로 정의된다. 주생성자의 가시성을 지정하려면 constructor 키워드를 꼭 명시해야 한다.

class Empty private constructor() {
  fun showMe() = println("Empty")
}

fun main() {
  // error: cannot access '<init>': it is private in 'Empty'
  Empty().showMe()
}

Empty 클래스의 유일한 생성자가 private이므로 이 클래스를 클래스 본문 외부에서 인스턴스화 할 수 없다는 점에 유의하라. 이어서 객체에 대해 살펴볼 텐데, 동반 객체(companion object)에서 팩토리 메서드(factory method)를 제공할 때 생성자를 감추는 방법을 어떻게 함께 조합할지 알아보자.

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