본문 바로가기

프로그래밍/kotlin

코틀린 - 데이터 클래스

반응형

우리는 자주 데이터를 보관하는 것을 주된 목적으로하는 클래스를 자주 만듭니다. 이러한 클래스에서 일부 표준 기능 및 유틸리티 기능은 데이터에서 기계적으로 파생 될 수 있습니다. 코틀린에서 이것을 

데이터 클래스

 라고하며 

data

다음 과 같이 표시됩니다 .

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

컴파일러는 기본 생성자에서 선언 된 모든 속성에서 다음 멤버를 자동으로 파생시킵니다.

  • equals()hashCode()쌍;
  • toString()형태의 "User(name=John, age=42)";
  • componentN()선언 순서대로 속성에 해당하는 함수 ;
  • copy() 기능 (아래 참조).

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

  • 기본 생성자에는 하나 이상의 매개 변수가 있어야합니다.
  • 모든 기본 생성자 매개 변수는 val또는 로 표시해야합니다 var.
  • 데이터 클래스는 추상, 열림, 봉인 또는 내부 일 수 없습니다.
  • (1.1 이전) 데이터 클래스는 인터페이스 만 구현할 수 있습니다.

또한 멤버 생성은 멤버 상속과 관련하여 다음 규칙을 따릅니다.

  • 이 명시 적으로 구현하는 경우 equals()hashCode()또는 toString()데이터 클래스 또는 본체에 최종 슈퍼 구현에서, 이들 기능은 생성되지 않으며, 기존의 구현이 사용된다;

1.1 이후, 데이터 클래스는 다른 클래스를 확장 할 수 있습니다 ( 예제는 

Sealed 클래스

 를 참조하십시오 ).JVM에서 생성 된 클래스에 매개 변수없는 생성자가 필요한 경우 모든 속성의 기본값을 지정해야합니다 ( 

생성자

참조 ).

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

복사

속성의 

일부

 를 변경하여 객체를 복사해야 하지만 나머지는 변경하지 않아도됩니다 이것은 

copy()

함수가 생성됩니다.

User

클래스의 복사 구현은 다음과 같습니다

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)

데이터 클래스 및 분해 선언

데이터 클래스 용으로 생성 된 구성 요소 함수 는 

분해 선언

 에 데이터를 데 사용할 수 있습니다 .

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

표준 데이터 클래스

표준 라이브러리가 제공 

Pair

하고 

Triple을 제공합니다.

 하지만 대부분의 경우 명명 된 데이터 클래스는 속성에 의미있는 이름을 제공하여 코드를보다 쉽게 ​​읽을 수 있도록하기 때문에 더 나은 디자인 선택입니다.

반응형

'프로그래밍 > kotlin' 카테고리의 다른 글

코틀린 - 제네릭  (0) 2021.04.26
코틀린 - sealed 클래스  (0) 2021.04.26
코틀린 - 확장  (0) 2021.04.25
코틀린 - 함수  (0) 2021.04.18
코틀린 - 고차 함수와 람다  (0) 2021.04.18