2.2.6 데이터 객체 구조 분해하기
프로퍼티가 N개 있는 데이터 클래스에는 component1부터 componentN이라는 함수가 자동으로 정의된다. 이 함수들은 클래스에 프로퍼티가 정의된 순서대로 각 프로퍼티에 접근하게 한다. 이런 함수를 주로 사용하는 경우가 객체의 구조 분해(destructing)다. 구조 분해를 사용하면 객체 프로퍼티에 훨씬 쉽게 접근할 수 있다.
data class Person(val name: String, val registered: Instant = Instant.now()) fun show(persons: List<Person>) { for ((name, date) in persons) println(name + "'s registration date: " + date) } fun main(args: Array<String>) { val persons = listOf(Person("Mike"), Person("Paul")) show(persons) }
show 함수는 다음과 같다.
fun show(persons: List<Person>) { for (person in persons) println(person.component1() + "'s registration date: " + person.component2()) }
코드를 보면 구조 분해를 통해 프로퍼티가 필요할 때마다 번거롭게 프로퍼티를 역참조할 필요가 없어서 코드가 더 명확하고 간결해짐을 알 수 있다.