더북(TheBook)

4.1.1 클래스 내부 구조

자바와 마찬가지로, 코틀린 클래스도 class 키워드 다음에 클래스 이름이 오고 그다음에 클래스 본문이 오는 형태로 정의된다. 클래스 본문은 멤버 정의가 들어있는 블록이다. 어떤 사람에 대한 정보를 저장하는 클래스를 정의해보자.

class Person {
  var firstName: String = ""
  var familyName: String = ""
  var age: Int = 0
  
  fun fullName() = "$firstName $familyName"

  fun showMe() {
    println("${fullName()}: $age")
  }
}

이 정의는 모든 Person 클래스의 인스턴스마다 firstName, familyName, age라는 프로퍼티와 fullName()showMe()라는 두 함수가 들어있음을 알려준다. 여러 가지 프로퍼티 유형 중 가장 단순한 것은 그냥 특정 클래스와 연관된 변수다. 자바 클래스 필드와 비슷하게 생각될 수도 있으며, 더 일반적인 경우에는 프로퍼티에 어떤 계산이 포함될 수 있다. 이럴 경우에는 클래스 인스턴스 내부에 저장되는 대신 그때그때 계산되거나 지연 계산되거나 맵(map)에서 값을 얻어오는 등의 방식으로 프로퍼티의 값을 제공할 수 있다. 모든 프로퍼티에서 일반적으로 쓸 수 있는 기능에는 다음과 같이 마치 변수처럼 프로퍼티를 사용하는 참조 구문이 있다.

fun showAge(p: Person) = println(p.age) // 프로퍼티 읽기
fun readAge(p: Person) {
  p.age = readLine()!!.toInt()          // 프로퍼티에 쓰기
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.