더북(TheBook)

프로퍼티는 어떤 클래스의 구체적인 인스턴스와 엮여 있기 때문에 이 인스턴스를 식으로 지정해야 한다(앞의 코드에서는 p가 이런 인스턴스다). 이런 인스턴스를 수신 객체(receiver)라 부르고, 수신 객체는 프로퍼티에 접근할 때 사용해야 하는 객체를 지정한다. 멤버 함수의 경우에도 똑같이 수신 객체가 있고, 이런 경우 멤버 함수를 메서드(method)라 부른다.

fun showFullName(p: Person) = println(p.fullname()) // 메서드 호출하기

수신 객체를 모든 클래스 멤버에게 암시적으로 제공되는 사용 가능한 추가 변수라고 생각해도 된다. 클래스 내부에서는 this 식으로 수신 객체를 참조할 수 있다. 대부분의 경우 this를 디폴트로 가정하기 때문에 수신 객체의 멤버 안에서 수신 객체의 멤버를 참조할 때는 this를 생략해도 된다. 예를 들어 첫 번째 예제를 다음과 같이 쓸 수도 있다.

class Person {
  var firstName: String = ""
  var familyName: String = ""
  var age: Int = 0
  
  fun fullName() = "${this.firstName} ${this.familyName}"
  fun showMe() {
    println("${this.fullName()}: ${this.age}")
  }
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.