data
한정자를 붙이면 몇 가지 함수가 자동으로 생성된다.
toString
equals
, hashCode
copy
componentN
toString
과 equals
, hasCode
는 자바에서도 유명한 함수들이다.copy
는 기본 생성자 프로퍼티가 같은 새로운 객체를 복제한다.
val player = Player(0, "Gecko", 9999)
val newObj = player.copy(name = "Thor")
print(newObj) // Player(id=0, name=Thor, points=9999)
componentN
함수는 위치 기반으로 객체를 해체할 수 있게 해준다.
val (id, name, pts) = player
// 컴파일하면 아래처럼 변환되는 것
val id: Int = player.component1()
val name: String = player.component2()
val pts: Int = player.component3()
Pair
와 Triple
이 있다.
// 값에 간단히 이름 붙일 때
val (description, color) = when {
degrees < 5 -> "cold" to Color.BLUE
degrees < 23 -> "mild" to Color.YELLOW
else -> "hot" to Color.RED
}
// 표준 라이브러리에서 볼 수 있 듯 미리 알 수 없는 aggregate(집합)을 표현할 때
val (odd, even) = numbers.partition { it % 2 == 1 }
val map = mapOf(1 to "San Francisco", 2 to "Amsterdam")