강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của catsbi
catsbi

câu hỏi đã được viết

Hướng dẫn dành cho người mới bắt đầu sử dụng Java và Kotlin

Bài 19. Vài điều về Kotlin

구조 분해는 componentN으로 순서에 의존하는거같은데 이 의존을 없앨 수 없나요?

Viết

·

505

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
}
javakotlin객체지향

Câu trả lời 2

2

catsbi님의 프로필 이미지
catsbi
Người đặt câu hỏi

답변 감사합니다! 이번에 배치 프로젝트의 언어를 코틀린으로 바꾸려고하는데 많은 도움이 되었습니다!

스프링 배치 기술 사용하시나요?

2

lannstark님의 프로필 이미지
lannstark
Người chia sẻ kiến thức

안녕하세요 한솔님! 좋은 질문 감사드립니다! 👍

 

음... 제 생각에는 두 가지 방법이 있을 것 같습니다~~!

 

첫 번째는 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)를 가져오기는 어려울 것 같습니다! 궁금증이 해소되셨으면 좋겠네요~ 감사합니다!! 🙏

Hình ảnh hồ sơ của catsbi
catsbi

câu hỏi đã được viết

Đặt câu hỏi