구조 분해는 componentN으로 순서에 의존하는거같은데 이 의존을 없앨 수 없나요?
512
16 asked
구조분해가 순서에 의존하는 것 같은데,
이러한 순서에 대한 의존성을 제거할 수는 없는 것인가요?
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
}
Answer 2
2
안녕하세요 한솔님! 좋은 질문 감사드립니다! 👍
음... 제 생각에는 두 가지 방법이 있을 것 같습니다~~!
첫 번째는 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)를 가져오기는 어려울 것 같습니다! 궁금증이 해소되셨으면 좋겠네요~ 감사합니다!! 🙏
수업노트
0
52
1
싱글톤과 스프링
0
70
2
get() = 3
0
49
2
강사님
0
74
1
강의 복습하면서 생긴 질문
1
93
1
Kotlin과 Java의 현업에서의 활용
0
121
2
data class와 자바의 Lombok을 이용한 DTO 클래스 차이 질문
0
71
1
코틀린에서 상속 시, 주의점에 대한 질문
1
95
3
내용 이해 질문
0
56
1
자바와 코틀린의 함수형 프로그래밍,
1
91
1
플랫폼 타입 설명 문의
2
73
2
널 아님 단언 관련 질문
0
83
1
강의 중 질문
0
79
2
범위 비교 질문
1
91
2
타입캐스팅 궁금한점 질문드립니다.
1
239
2
코틀린 val 질문
0
166
2
완강 후 Kotlin 이런저런 질문 드려봅니다!
3
408
2
확장함수 스타일 질문
0
138
2
확장 프로퍼티 질문
1
156
1
update 함수를 만든다는게 어떤 의미인지 예시가 궁금합니다!
1
283
1
java class의 NotNull 어노테이션 인식
1
260
1
[16강] 확장함수 관련 질문입니다!
1
130
2
리턴타입 사용시 any를 사용해도 괜찮은가요?
1
138
1
안녕하세요 scope function 에 receiver 가 없는 경우
1
168
1

