코틀린을 보다보면, 다음과같이 파이썬에서나 볼듯한 기이한 표현을 마주하는 경우가 있다.
val (name, age) = person
일반적인 표현은 아닌데, 이처럼 한큐에 여러 변수들에 값을 저장하는게 가능하다. 이를 Desturturing Declarations라고 부른다. 위 코드는 컴파일 타임에 다음과 같이 변형된다.
val name = person.component1()
val age = person.component2()
보면 알겠지만, 내가 만드는 클래스에 component1(), component2()를 정의 하면 역시 이처럼 사용가능하다. data class에는 이미 구현되어 있기 때문에, 예외적인 경우가 아니라면 data class를 쓰는게 제일 쉽다. 예를들어 함수의 리턴값을 받는 경우, 리턴값을 data class로 해주면 된다.
data class Result(val result: Int, val status: Status)
fun function(...): Result {
// computations
return Result(result, status)
}
// Now, to use this function:
val (result, status) = function(...)
Map에서도 편리하게 사용가능한데, map iterator에 위 내용이 구현되어 있으므로 다음과 같이 for문이나 lambda표현에 쓸 수 있다.
for ((key, value) in map) {
// do something with the key and the value
}
...
map.mapValues { (key, value) -> "$value!" }
위 내용은 코틀린 공식문서( https://kotlinlang.org/docs/reference/multi-declarations.html )에서 가져왔다.