Chandroid
Android Development Diary
Chandroid
전체 방문자
오늘
어제
  • 분류 전체보기
    • Today I Learned (TIL)
    • Android
      • Android Weekly
      • Android 13
      • Android Debug Bridge (ADB)
      • Library
      • View
      • Jetpack
      • Gist
    • Kotlin
      • Docs
      • Clean Code
    • Object-Oriented Programming
    • Etc
      • 정보처리기사 실기
      • 주절주절

블로그 메뉴

  • 홈
  • 태그

공지사항

인기 글

태그

  • Database
  • Glide
  • kotlin
  • Realm
  • Sealed classes
  • GIST
  • customview
  • generics
  • Kotlin Docs
  • DataBinding
  • Android Debug Bridge
  • MVVM
  • ADB
  • Data classes
  • Extensions
  • Android
  • clean code
  • Android 13
  • Solid
  • til
  • Agile Software
  • Today I Learned
  • OOP
  • RecyclerView
  • DiffUtil

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Chandroid

Android Development Diary

[Kotlin Docs] Data classes
Kotlin/Docs

[Kotlin Docs] Data classes

2022. 4. 7. 12:11

본 글은 https://kotlinlang.org/docs/home.html 를 기반으로 작성자 마음대로 번역한 글입니다.
오역 & 의역이 빈번하며 모든 질문 및 태클 환영합니다!
2022-04-07 기준으로 작성되었습니다.

데이터를 유지하기 위한 목적의 클래스를 생성하는 것은 드문 일이 아닙니다. 이러한 클래스에서 일부 표준 기능과 유틸리티 함수는 종종 데이터에서 기계적으로 파생됩니다. 코틀린에서, 이것들은 data classes라고 불리며 data로 표시됩니다.

 

 
컴파일러는 기본 생성자에 선언된 모든 프로퍼티로부터 다음 멤버들을 자동으로 파생합니다.
  • equals() / hashCode() 쌍
  • "User(name=John, age=42)" 형태의 toString()
  • 선언 순서의 프로퍼티에 대응하는 componentN() 함수↗
  • copy() 함수 (아래 확인)

생성된 코드의 일관성과 의미 있는 동작을 보장하기 위해서, 데이터 클래스는 다음 요구 사항을 충족해야 합니다.

  • 기본 생성자는 최소 하나의 파라미터를 가져야 합니다.
  • 기본 생성자의 모든 파라미터는 val이나 var로 표시되어야 합니다.
  • 데이터 클래스는 abstract, open, sealed 혹은 inner일 수 없습니다.

추가적으로, 데이터 클래스의 멤버 생성은 멤버 상속에 대해 다음 규칙을 따릅니다.

  • equals(), hashCode(), toString()이 데이터 클래스의 바디에서 명시적으로 구현되거나 슈퍼클래스의 final로 구현된다면, 이 함수들은 자동으로 생성되지 않고 존재하는 구현이 사용됩니다.
  • 슈퍼타입이 open이며 호환되는 타입을 반환하는 componentN() 함수를 가지고 있으면, 대응하는 함수가 데이터 클래스에 대해 생성되고 슈퍼타입 함수를 오버라이드합니다. 슈퍼타입의 함수가 호환되지 않는 시그니쳐나 final로 인해 오버라이드될 수 없다면, 에러를 표시합니다.
  • componentN()과 copy() 함수의 명시적인 구현의 제공은 허용되지 않습니다.

데이터 클래스는 다른 클래스를 확장할 수 있습니다. (Sealed classes↗)

 

JVM에서는 생성된 클래스에 파라미터 없는 생성자가 필요한 경우, 프로퍼티의 기본값을 지정해 주어야 합니다.
(Constructors↗)

 

 

Properties declared in the class body

자동으로 생성된 함수에 대해 컴파일러는 기본 생성자 내부에 선언된 프로퍼티만을 사용합니다. 생성되는 구현에 대해 프로퍼티를 제외하기 위해서는, 클래스 바디에 선언해야 합니다.

 

 

name 프로퍼티만이 toString(), equals(), hashCode(), 그리고 copy() 구현에서 사용되며, component1() 하나의 컴포넌트 함수만이 존재합니다. 두 Person 객체가 다른 나이를 가지고 있음에도, 같은 것으로 취급됩니다.

 

 


Copying

copy() 함수를 사용하여 객체를 복사하면, 나머지를 변경하지 않은 채로 일부 속성만 변경할 수 있습니다. 아래 User 클래스에 대한 이 함수의 구현은 다음과 같습니다.

 

 
다음과 같이 사용할 수 있습니다.
 

 


Data classes and destructuring declarations

데이터 클래스에서 생성된 Component functions는 destructuring declarations↗에서 사용 가능하게 만들어줍니다.

 

 

Standard data classes

기본 라이브러리는 Pair와 Triple 클래스를 제공합니다. 그러나 대부분의 경우 이름 있는 데이터 클래스를 사용하는 것이  프로퍼티에 의미있는 이름을 부여하여 코드의 가독성을 높여주므로 더 나은 디자인 선택입니다.

 


https://kotlinlang.org/docs/data-classes.html
 

Data classes | Kotlin

 

kotlinlang.org

 

저작자표시 비영리 (새창열림)

'Kotlin > Docs' 카테고리의 다른 글

[Kotlin Docs] Generics: in, out, where  (0) 2022.05.04
[Kotlin Docs] Sealed classes  (0) 2022.04.08
[Kotlin Docs] Extensions  (0) 2022.04.07
[Kotlin Docs] Visibility modifiers  (0) 2022.02.24
[Kotlin Docs] Functional (SAM) interfaces  (0) 2022.02.17
    Chandroid
    Chandroid

    티스토리툴바