데이터 클래스

별다른 동작없이 데이터를 가지는 클래스를 만들며 해당 클래스의 기능은 데이터로부터 만든다. 코틀린에서는 이를 데이터 클래스라고 부르며 data 라는 수식어를 사용

data class User(val name: String, val age: Int)

컴파일러가 자동 생성하는 멤버

  • equals() / hasCode()
  • toString()
  • 프로퍼티 선언 순서에 따라 대응하는 componentN() 함수
  • copy() (아래 참고)

명시적으로 상속받아서 사용 가능

데이터 클래스 충족 조건

  • 주요 생성자에는 적어도 하나의 파라매터가 필요
  • 모든 주요 생성자 파라매터는 val 혹은 var 로 지정
  • 데이터 클래스는 추상 클래스, open 클래스, sealed 클래스, inner 클래스일 수 없다
  • (1.1 이전) 데이터 클래스는 인터페이스만 구현 가능

1.1 이후 데이터 클래스는 다른 클래스를 확장할 수 있다. (예. Sealed 클래스 참조)

클래스에 파라매터가 없는 생성자가 필요한 경우, 모든 프로퍼티의 기본값을 지정할 필요가 있다 (생성자 잠조)

data class User(val name: String = "", val age: Int = 0)

Copying

프로퍼티의 일부를 변경해서 객체를 복사할 필요가 있을 경우 copy() 함수를 생성

fun copy(name: String = this.name, age: Int = this.age) = User(name, age)

이를 토대로

val jack = User(name = "Jack", age = 1)
val olderJack = jack.copy(age = 2)

데이터 클래스와 비구조화 선언 (Destructuring Declarations)

데이터 클래스용으로 생성된 구성 요소 함수는 다음과 같이 비구조화 선언에 사용 가능

val jane = User("Jane", 35) 
val (name, age) = jane
println("$name, $age years of age") // "Jane, 35 years of age" 출력

표준 데이터 클래스

표준 라이브러리에서 PairTriple 제공

하지만, 대부분 이름을 가지는 데이터 클래스를 사용하는 것으로 코드를 보다 쉽게 읽을 수 있도록 한

results matching ""

    No results matching ""