- 구조 분해를 사용하면 복합적인 값을 분해해서 여러 다른 변수를 한꺼번에 초기화할 수 있다. 내부에서 구조 분해 선언은 관례를 사용하는데, 각 변수를 초기화하기 위해 다음과 같이 componentN이라는 함수를 호출한다.
val (a,b) = p ---> val a = p.component1()
val b = p.component2()
data 클래스의 주 생성자에 들어있는 프로퍼티에 대해서는 자동으로 componentN 함수가 만들어진다.
구조 분해 선언은 함수에서 여러 값을 반환하게 할 때 유용하다.
data class NameComponents(val name:String, val extension: String)
fun splitFilename(fullName:String): NameComponents{
val result = fullName.split('.', limit=2)
return NameComponents(result[0], result[1]);
}
>>>val (name, ext) = splitFilename("example.kt")
>>>println(name)
example
>>>println(ext)
kt
배열이나 컬렉션에도 componentN 함수가 있다. 따라서 위의 예제를 다음과 같이 개선할 수 있다.
fun splitFilename(fullName:String): NameComponents{
val (name, extension) = fullName.split('.', limit=2)
return NameComponents(name, extension);
}
1. 구조 분해 선언과 루프
- 루프 안에서도 구조 분해 선언을 사용할 수 있다.
fun printEntries(map: Map<String, String>){
for ((key, value) in map){
println("$key -> $value")
}
}
>>>val map = mapOf("Oracle" to "Java", "JetBrains" to "Kotlin")
>>>printEntries(map)
Oracle -> Java
JetBrains -> Kotlin
위의 예제는 객체를 이터레이션하는 관례와 구조 분해 선언에 관한 관례를 활용한다. 맵에 대한 확장 함수로 iterator가 있기 때문에 자바와 달리 코틀린에서는 맵을 직접 이터레이션 할 수 있다.
'3-1기 스터디 > Kotlin' 카테고리의 다른 글
[3-2, 5주차] 연산자 오버로딩과 기타 관례(4) (0) | 2022.05.31 |
---|---|
[3-2, 2주차] 연산자 오버로딩과 기타 관례(2) (0) | 2022.05.07 |
[3-2, 1주차] 연산자 오버로딩과 기타 관례(1) (0) | 2022.04.06 |
[12주차] 코틀린 타입 시스템(2) (0) | 2022.01.30 |
[11주차] 코틀린 타입 시스템(1) (0) | 2022.01.21 |
댓글