728x90
반응형
kotlin 데이터 클래스는 구조 분해 선언(Destructuring Declaration)이라는 특성을 갖고 있다.
- 구조 분해를 사용하면 복합적인 값을 분해해서 여러 다른 변수를 한꺼번에 초기화할 수 있다.
val p = Point(10, 20)
val (x, y) = p
// x => 10
// y => 20
- 구조 분해 선언의 각 변수를 초기화하기 위해 componentN이라는 함수를 호출한다.
- data 클래스의 주 생성자에 들어있는 프로퍼티에 대해서는 컴파일러가 자동으로 componentN함수를 만들어준다.
val (x, y) = p
// 위 코드 컴파일 후
val x = p.component1()
val y = p.component2()
// data 타입이 아닌 클래스에서 구현하는 방법
class Point(val x: Int, val y: Int) {
operator fun component1() = x
operator fun component2() = y
}
- 배열이나 컬렉션에도 componentN함수가 있다.
- 정해진 컬렉션을 다루는 경우 구조 분해가 특히 더 유용하다.
data class NameComponents(
val name: String,
val extension: String
)
fun splitFileName(fullName: String): NameComponents {
val (name, extension) = fullName.split(',', limit = 2)
return NameComponents(name, extension)
}
- 맵에서 구조 분해 선언 + 루프 활용하기
fun printEntries(map: Map<String, String) {
for ((key, value) in map) {
println("$key -> $value")
}
}
for (entry in map.entries) {
val key = entry.component1()
val value = entry.component2()
}
for((key, value) in map)
-> 이터레이션 관례 + 구조 분해 선언
728x90
반응형
'프로그래밍 노트 > Kotlin' 카테고리의 다른 글
[Kotlin] 코루틴 찍먹 (1) | 2024.03.18 |
---|---|
[Kotlin] 고차함수 알아보기 (0) | 2023.07.07 |
[Kotlin] 컬렉션과 범위에서 사용할 수 있는 관례 정리 (0) | 2023.06.29 |
[Kotlin] 산술/비교 연산자 오버로딩 (0) | 2023.06.29 |
[Kotlin] 코틀린 데이터 타입 (0) | 2023.03.27 |