728x90
반응형
사실 구조 분해라는 말은 코틀린에서 처음 들어 봤다.
어떠한 값을 여러 컴포넌트로 분해해서 나눠 준다는 의미 같다. 말로 설명하기 쉽지 않으니 소스 코드를 보자
fun compute(input: Int): Pair<Int, String> =
if (input > 5)
Pair(input * 2, "High")
else
Pair(input * 2, "Low")
fun compute2(input: Int): Triple<Int, String, String> =
if (input > 5)
Triple(input * 2, "High", "Dummy")
else
Triple(input * 2, "Low", "Dummy")
fun pair() {
println(compute(7))
println(compute(4))
val result = compute(5)
println(result.first)
println(result.second)
}
pair 함수를 실행하게 되면 결과값은 다음과 같이 나온다.
compute 라는 함수가 리턴하는 값이 한 개가 아니고 Pair라는 곳에 두 개의 값으로 담겨 있음을 볼 수 있다.
그리고 두 개의 값은 first, second와 같은 키워드를 통해 접근할 수 있다는 것도 알 수 있다.
값이 두 개가 아닌 3개를 리턴할 수도 있는데 그 때는 Triple을 사용하면 된다.
이 이상의 경우에는 코틀린에서 지원하지 않으며 그럴 경우에는 값객체를 만들어서 사용하면 된다. 물론 개인적으로는 Pair, Triple도 크게 사용 안할 것 같긴 하다.
Pair로 리턴된 것을 분해해서 명시적으로 받을 수도 있다.
fun dataStructure() {
val (value, description) = compute(7);
println(value)
println(description)
}
이렇게 할 경우 다음과 같은 결과를 얻을 수 있다.
Pair로 리턴된 값을 value와 description 으로 받아 표현 하였다.
다음으로 살펴 볼 것은 withIndex() 함수이다. 리스트에 담긴 값을 IndexedValue라는 타입의 객체에 담아 반환하게 된다.
fun withIndex() {
val list = listOf('a', 'b', 'c')
for ((index, value) in list.withIndex()) {
println("${index}:${value}")
}
}
결과는 아래와 같다.
index, value에 값이 잘 담긴 것을 볼 수 있다.
728x90
반응형
'Develop! > Kotlin' 카테고리의 다른 글
안전한 호출과 엘비스 연산자 in kotlin (0) | 2023.09.14 |
---|---|
Null이 될 수 없는 타입 in Kotlin (0) | 2023.09.06 |
Data Class in Kotlin (0) | 2023.09.04 |
when in kotlin (0) | 2023.08.23 |
오버로딩(OverLoading) in Kotlin (0) | 2023.08.18 |