inflearn logo
강의

Course

Instructor

Java to Kotlin Starter Guide for Java Developers

Lecture 19. Kotlin Miscellany

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

512

catsbi

16 asked

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
}

java kotlin 객체지향

Answer 2

2

catsbi

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

0

siyoon4730

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

2

lannstark

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

 

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

 

첫 번째는 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