반응형
우리는 자주 데이터를 보관하는 것을 주된 목적으로하는 클래스를 자주 만듭니다. 이러한 클래스에서 일부 표준 기능 및 유틸리티 기능은 데이터에서 기계적으로 파생 될 수 있습니다. 코틀린에서 이것을
데이터 클래스
라고하며
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 이후, 데이터 클래스는 다른 클래스를 확장 할 수 있습니다 ( 예제는
를 참조하십시오 ).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 |