-
카테고리
-
세부 분야
프로그래밍 언어
-
해결 여부
미해결
구조 분해는 componentN으로 순서에 의존하는거같은데 이 의존을 없앨 수 없나요?
23.05.28 20:56 작성 조회수 193
1
구조분해가 순서에 의존하는 것 같은데,
이러한 순서에 대한 의존성을 제거할 수는 없는 것인가요?
data class Foo(
var a:String,
var b:Int,
var c:Long,
var d:String
)
fun main(){
val foo = Foo("hello", 33, 44L, "Bye")
//기존 방식
val (a, b, c, d) = foo
//원하는 방식
val (c, a) = foo
}
답변을 작성해보세요.
2
최태현
지식공유자23.05.28 21:56
안녕하세요 한솔님! 좋은 질문 감사드립니다! 👍
음... 제 생각에는 두 가지 방법이 있을 것 같습니다~~!
첫 번째는 a / b / c / d 순서 중에 a와 c만 가져오고 싶다면...
val (a, _, c, _) = foo
와 같이 사용하지 않을 변수를 _
처리하는 방법이에요!
물론 원하시는 것처럼 a와 c만 가져오는 방식은 아닙니다 ㅎㅎㅎ.. 느낌만 흉내내는거죠...!!
두 번째는 componentN을 직접 구현하는 방식입니다.
val (c, a) = foo
class Foo( // 자세히 보시면 data가 빠졌습니다!! data class에서 componentN을 오버라이드 할 수는 없습니다!
val a: String,
val b: Int,
val c: Long,
val d: String
) {
operator fun component1(): Long {
return c // component1로 c를 반환한다
}
operator fun component2(): String {
return a // component2로는 a를 반환한다
}
}
이렇게 되면 원하시는대로 c와 a만 정확히 가져올 수는 있지만... 반대로 (d, b)를 가져온다거나... (a, d)를 가져온다거나 이렇게 유연하게 조합을 구성할 수는 없습니다! 😭
이 두 방법 외에, 순수하게 구조분해의 원리 (componentN
) 를 이용해 (c, a)를 가져오기는 어려울 것 같습니다! 궁금증이 해소되셨으면 좋겠네요~ 감사합니다!! 🙏
답변 2