- [Kotlin] Kotlin Destructuring2023년 12월 27일 18시 36분 42초에 업로드 된 글입니다.작성자: 핀수728x90반응형
때로는 객체를 여러 변수로 분해하는 것이 더 편리할 때가 있다.
이를 코틀린에선 구조 분해 할당(구조 분해 선언)이라고 하며, 한번에 여러 변수를 생성할 수 있다.
data class Person( val name: String, val age: Int, ) fun main() { val person = Person("David", 30) val (name, age) = person println(name) // David println(age) // 30 }
이는 다음과 같이 컴파일 된다.
val name = person.component1() val age = person.component2()
데이터 클래스가 자동으로 componentN() 를 제공하며,
클래스에서 직접 구현하기 위해서는 다음과 같이 선언하면 된다.
class Dog(val name: String, val age: Int) { operator fun component1() = name operator fun component2() = age } val (dogName, dogAge) = Dog("happy", 4) println(dogName) // happy println(dogAge) // 4
구조 분해 할당은 루프에서도 사용 가능하다.
val persons = listOf(Person("Jane", 20), Person("James", 34), Person("Jenny", 21)) for ((name, age) in persons) { println("${name}'s age is $age.") /* Jane's age is 20. James's age is 34. Jenny's age is 21. */ }
함수에서 두개의 값을 반환할 때도 사용할 수 있다.
fun makePerson(name: String, age: Int): Person = Person(name, age) fun main() { val (userName, userAge) = makePerson("amy", 35) println(userName) // amy println(userAge) // 35 }
Pair<String, Int> (또는 Triple)를 사용하여도 무방하나, 데이터 이름을 지정하는 것이 더 낫다고 한다.
map을 탐색할 때에도 아주 편리하다.
val map = mapOf(1 to "amy", 2 to "tom", 3 to "john", 4 to "jane") for ((key, value) in map) { println("$key : $value") } /* 1 : amy 2 : tom 3 : john 4 : jane */
val newMap = map.mapValues { (key, value) -> "Hello, no.$key $value" } println(newMap) // {1=Hello, no.1 amy, 2=Hello, no.2 tom, 3=Hello, no.3 john, 4=Hello, no.4 jane}
그러나 구조 분해 할당은 순서에 의존해 분해하는 형식이기 때문에 실수하기 좋다.
val person = Person("David", 30) val (age, name) = person // 아주 극단적인 예를 들어보았다. println("My name is $name. I'm $age years old.") // My name is 30. I'm David years old.
Kotlin 2.0에서 이 문제를 해결할 것이라고 코틀린 컨퍼런스 23에서 발표했다고 하니
어떻게 개선될지 지켜보면 좋을 것 같다.
공부하며 작성된 글이라 잘못된 정보가 있을 수 있습니다.
말씀해주시면 수정하겠습니다. 감사합니다.
References
아래 글을 참고하여 작성 되었습니다.
Destructuring declarations | Kotlin
kotlinlang.org
코틀린 컨퍼런스 23 키노트 정리 (KotlinConf’23)
코틀린 컨퍼런스가 2019년 이후 4년만에 암스테르담에서 다시 열렸습니다. 영상이 코틀린 youtube 채널에 모두 공개되어서 먼저 키노트를 시청했는데 흥미로운 내용이 많더라구요. 그래서 글로 간
jaeyeong951.medium.com
코틀린(Kotlin) - 구조 분해 선언과 component 함수
데이터 클래스의 특성 중 convention 원리와 관련된 특성인 구조 분해 선언(destructuring declaration)에 대해 살펴보도록 하겠습니다. 데이터 클래스에 대한 기본적인 내용은 아래 포스팅을 참고하시면
0391kjy.tistory.com
728x90반응형'pinslog > Log.daily()' 카테고리의 다른 글
[git] git stash 쓰다 식겁한 이야기 (4) 2024.07.03 [Kotlin] takeIf (0) 2023.12.26 [Etc.] MacOS 영상 녹화하기 (feat. 사운드 캡쳐) (0) 2023.12.13 [Kotlin] tailrec 꼬리재귀 (0) 2023.12.10 [IDE] VSCode 에서 Kotlin 시작하기 (feat. MAC OS) (0) 2023.12.08 다음글이 없습니다.이전글이 없습니다.댓글