코틀린(Kotlin)

코틀린(kotlin) : Destructuring Declaration

알통몬_ 2018. 2. 6. 18:00
반응형


공감 및 댓글은 포스팅 하는데

 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 

도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 

만들어 나가겠습니다^^

 


이번 포스팅에서는 Destructuring Declarations 에 대해 공부합니다.


Destructuring Declarations

때때로 아래 예제처럼 객체를 여러 변수로 분리하는 것이 편리합니다.

val (name, id) = member

이러한 문법을 destructuring declaration 이라고 부릅니다.

앞으로 DD 라고 표현하겠습니다.

DD 는 여러 개의 변수를 한 번에 생성할 수 있습니다.

그리고 사용할 때 각각 나눠서 사용할 수 있습니다.

println(name)

println(id)

우리가 선언은 아래처럼 했지만

val (name, id) = member

실제 컴파일 될 때는 

val name = member.component1()
val id = member.component2()

이렇게 컴파일 됩니다.

component1(), component2() 메서드는 코틀린에서 널리 사용되는

규칙의 또 다른 예입니다.

컴포넌트 메서드가 호출될 수 있는 한 무엇이든 DD 오른쪽에 올 수 있습니다.

물론 당연히 component3(), component4()... 등이 있을 수 있습니다.


*componentN() 메서드를 사용하려면 DD 앞에 operator 키워드가 있어야 합니다.


또한 DD는 for-loops 에서도 사용할 수 있습니다.

for( (a, b) in collection ) { ... }

변수 a와 b는 collection 요소에서 호출된 component1(), component2()의 반환 값을

가져옵니다.

---------------------------------------------------------------------------------------------------------


---------------------------------------------------------------------------------------------------------

예제 : 두 개의 값을 반환하는 메서드

fun main(args: Array<String>) {
val (a,b) = function()
println(a)
print(b)
}

data class Saved(val a : Int, val b : Int)
fun function() :Saved {
return Saved(10, 20)
}


예제2 : DD 와 Maps

val map = HashMap<Int, String>()

fun main(args: Array<String>) {
map[1] = "AAA"
map[2] = "BBB"
map[3] = "CCC"
map[4] = "DDD"
map[5] = "EEE"
for( ( key, value ) in map) {
println("$key - $value")
}
}


Underscore for unused variables( 1.1버전부터)

DD에서 사용하지 않는 변수가 있다면, _ 언더스코어로 대체할 수 있습니다.

for( ( _, value ) in map) {
println(value)
}


람다식에서도 사용가능합니다.

map.mapValues { entry -> "${entry.value}!" }
map.mapValues { (key, value) -> "$value!" }

람다식에서 사용하실 때

() 안에 선언된 변수와 그냥 선언된 변수는 다르다는 점을 유의하셔야 합니다.

() 안에 선언된 건 DD 겠죠?


이상입니다.

다음 포스팅에서는

Collections : List, Set, Map 에 대해 공부합니다.

감사합니다.

반응형