Destructuring declarations는 객체를 변수로 "풀어" 선언하는 것을 허용하여 코드를 간결하게 만듭니다. 역사적으로 Java 및 기타 언어에서는 각 구성 요소에 대해 별도의 getter를 작성해야 하므로 구문이 복잡해졌습니다. Kotlin은 분해(destructuring)를 지원하기 위해 특별한 componentN() 메서드를 도입했습니다.
문제: 복합 객체의 일부를 수동으로 가져오는 것이 불편합니다 — 많은 할당이 필요하고, 코드 가독성이 떨어집니다.
해결책: data class는 컴파일 시 자동으로 componentN() 메서드를 생성하여 속성 값을 가져올 수 있는 destructuring declarations를 사용할 수 있게 합니다.
코드 예:
data class User(val name: String, val age: Int) val user = User("Pavel", 32) val (name, age) = user println("$name is $age years old") // Pavel is 32 years old
주요 특징:
destructuring declaration을 통해 몇 개의 변수를 받을 수 있습니까?
클래스에 정의된 componentN() 메서드의 수만큼 가능합니다. data class의 경우 primary constructor의 모든 속성에 대해 자동으로 생성됩니다(최대 255).
destructuring은 일반(비 data) 클래스에서도 작동합니까?
클래스에 수동으로 componentN() 메서드가 선언된 경우에만 작동합니다.
예:
class Point(val x: Int, val y: Int) { operator fun component1() = x operator fun component2() = y } val (x, y) = Point(10, 20)
destructuring declaration에서 값을 생략할 수 있습니까?
네, 외부 변수를 생략하기 위해 _ (언더스코어)를 사용하세요.
val (_, onlyAge) = user
부정적인 사례
프로젝트에서 개발자는 componentN() 메서드가 없는 일반 클래스를 위해 destructuring을 사용하려고 시도했으나 컴파일 오류가 발생하였고, 이후 매우 큰 클래스(10개 이상의 속성)에 대해 수동으로 추가했습니다.
장점:
단점:
긍정적인 사례
제한된 수의 파라미터를 가진 data class 사용 (예: Result(val data: T, val error: Throwable?))로 API 응답 처리를 위한 간결한 destructuring declaration.
장점:
단점: