Develop!/Kotlin

구조 분해 선언 in Kotlin

체리필터 2023. 9. 6. 14:35
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