오늘은 Destructuring declaration 에 대해서 정리해 보도록 하겠습니다.
1. Destructuring declaration
한국말로는 구조파괴 또는 분해 선언이라고 할 수 있는데요.
단 한줄로, 객체의 여러 프로퍼티들을 한번에 선언하게 해주는 문법입니다.
코드가 짧아지고, 가독성도 향상됩니다.
2. 구현
2-1. 구현준비
실제로 코드로 보면서 이해하는 것이 빠를텐데요.
다음과 같은 간단한 Student 클래스가 있다고 가정해 보겠습니다.
data class Student(val name: String, val age: Int)
이제 위의 데이터 클래스로 객체를 아래와 같이 만들어줍니다.
val student = Student("Ive Shim", 23)
2-2. 기존방법
원래는 이 student 객체의 name과 age에 변수를 부여해서 접근한다면 다음의 2줄이 필요하게 됩니다.
val studentName = student.name
val studentAge = student.age
2-3. Destructuring declaration 문법
그런데, Destructuring declaration 을 이용하면 아주 심플하게,
다음 한줄로 선언이 가능하게 됩니다.
val (studentName, studentAge) = student
2-4. 다른 코드에서의 구현사례
다음과 같은 실제 사례도 한번 보겠습니다.
먼저 구현하기 전 입니다.
아래의 userType과 userList는 Pair()타입의 데이터인데요.
val userType = userWithSameType.first
val userList = userWithSameType.second
if(userList.isEmpty()) return
val firstUser = realtimeBusList.getOrNull(0) ?: return
val secondUser = realtimeBusList.getOrNull(1)
위의 경우 userType과 userList 를 바로 Destructuring declaration 로 구현가능합니다.
특히나 Pair타입과 같이 접근자가 first와 second같이 의미가 크지 않는 경우,
Destructuring declaration 선언하는 것이 간결하고 읽기 좋습니다.
val(userType, userList) = userWithSameType
if(userList.isEmpty()) return
val firstUser = realtimeBusList.getOrNull(0) ?: return
val secondUser = realtimeBusList.getOrNull(1)
아래와 같은 식으로도 사용할 수 있는데요.
matchingInfo 로 orderMin과 orderNum 이 있으면 Pair 로 데이터를 전달해 주는데,
이 2개의 데이터를 Destructuring declaration 로 아래와 같이 넣어줄 수 있습니다.
val (orderMin, orderNum) = if (matchingInfo != null) {
Pair(matchingInfo.orderMin, matchingInfo.orderNum)
} else {
Pair("", "")
}
Pair나 Triple 과 Destructuring declaration 얼마든지 같이 사용할 수 있습니다.
3. 주의할 점
3-1. Data class 객체에 사용하는 것이 디폴트
Kotlin에서는 기본적으로 data class의 객체에 Destructuring declaration 사용이 가능합니다.
compiler가 componentN() 함수를 구현해주기 때문인데요.
만약 다른 종류의 class에 사용하려고 할 경우,
아래와 같이, componentN() 함수를 직접 정의해 주어야 사용할 수 있습니다.
class Person(val firstName: String, val lastName: String) {
operator fun component1(): String = firstName
operator fun component2(): String = lastName
}
'Android 개발 > Kotlin' 카테고리의 다른 글
CoerceIn, coerceAtMost, coerceAtLeast 범위지정 함수에 대한 정리 # Kotlin (0) | 2023.05.26 |
---|---|
MapNotNull 과 MapNotNullTo 에 대한 정리 # null 제거 (0) | 2023.05.24 |
List 아이템 부분추출 함수 정리 # take, takeWhile, takeLast, drop, slice, first and last (0) | 2023.05.15 |
compareBy 와 min 그리고 sortedWith 사용방법에 대한 정리 (0) | 2023.05.10 |
any , contains, none , all, containsAll 에 대한 정리 # Kotlin list 존재여부 확인 (1) | 2023.05.06 |
Kotlin Escape 에 대한 정리 # RawString Escaped String Literal (0) | 2023.04.30 |
Kotlin GroupBy 구현과 정리 # List 그룹핑 (0) | 2023.04.28 |
getOrNull 과 getOrElse 에 대한 정리 # List Kotlin (0) | 2023.04.28 |
Kotlin Pair 와 Map 함수 이용해서 데이터 가공하기 (0) | 2023.04.26 |
Kotlin custom getter 와 setter 구현하기 (0) | 2023.04.11 |
댓글