성장기록지

[Kotlin] 구조 분해와 Component함수, 분해 가능 개수 본문

코틀린

[Kotlin] 구조 분해와 Component함수, 분해 가능 개수

pengcon 2025. 1. 6. 18:13
이전에 Data Class를 학습하며 ComponentN() 함수를 다뤘다.
간단하게 알아봤던 구조분해를 조금 더 자세히 알아보고자 한다.

디스트럭쳐링(Destructuring)

객체가 가지고 있는 여러 값을 분해해서 여러 변수에 한꺼번에 초기화할 수 있다.

data class Person(val name: String, val age: Int)

fun main() {
    val person = Person("Hoon", 28)

    // 구조 분해
    val (name, age) = person

    println("Name: $name, Age: $age")
}

위의 Data Class의 예시처럼 여러 변수를 괄호를 묶게 되면 내부에서는 각 변수를 초기화하기 위해 

componentN이라는 함수를 호출하게 된다. 이후 아래와 같이 변수 위치마다 번호를 붙이게 된다. 

 

그렇다면 Data Class가 아닌 일반 Class의 경우에는 어떻게 해야할까?

아래처럼 직접 ComponentN을 만들면 된다.

class Person(val name: String, val age: Int) {
    // component1 함수: 첫 번째 프로퍼티를 반환
    operator fun component1() = name
    
    // component2 함수: 두 번째 프로퍼티를 반환
    operator fun component2() = age
}

 

Pair, Triple

코틀린 표준 라이브러리에 미리 정의된 Pair와 Triple도 구조분해가 가능하다.

어떻게 Pair랑 Triple도 구조분해가 가능할까?
코드 내부를 보고 알게 된 재밌는 사실인데, Pair과 Triple은 Data Class로 구현되어있다!
따라서 기본적으로 ComponentN이 구현되어있던 것이다.

 

 

 

Map

코틀린에서 map은 key-value쌍을 Entry를 통해 관리하고, 이에 대한 ComponentN을 제공한다. 

val map = mapOf("hoon" to 28, "taejun" to 25, "ilyeong" to 25,"hahyeon" to 25)

    // Map을 순회하며 구조 분해
    for ((name, age) in map) {
        println("Name: $name, Age: $age")
    }

 

List, Array

작성 중 . . .