: 보통 DTO 등 데이터를 보관하기 위한 목적으로 사용할 때 Kotlin에서는 Data class로 선언해 사용한다.
- JPA 사용 시 Kotlin에서는 entity를 data class로 선언하지 않는다.
- Entity는 그냥 class로, 어노테이션을 사용해서.
- 주로 DTO나 VO를 목적으로 data class를 사용하는 것으로 보인다.
특징
- 코틀린은 기본적으로 상속을 막아놓고
open
keyword를 추가해 상속 가능한 class로 변경할 수 있다. 그런데, data class에서는 open keyword 조차 불가능하다.- 애초에 상속을 받는 것을 목적으로 만든 클래스가 아니기 때문
- 위와 마찬가지로 abstract, inner 키워드도 불가능하다.
- primary constructor가 있어야한다. ->
data clarr Foo( //here)
- 컴파일러가 primary constructor에 선언된 모든 프로퍼티들에 대해 여러 메소드들을 제공한다.
자동 생성 메소드
: 이 메서드들은 data class 생성 시점에 자동으로 만들어진다.
hashCode()
: 객체의 주소값을 해싱해서 생성한 객체마다 갖는 고유의 값. 따라서, 같은 객체인지 판별할 때 쓰인다.equals()
: 객체가 담고있는 내용이 같은지를 검사한다.hashCode
구분.toString()
componentN()
: JavaScript의 구조 분해 할당처럼 쓰이는 것 같다.1 2 3 4 5 6
// 구조 분해 할당 val (name, age) = person // componentN() 이용. 선언한 순서대로 숫자가 들어가야 한다. val name = person.component1() val age = person.component2()
copy()
: 어떠한 객체의 내용을 그대로 복사해 사용할 수 있게 해준다.사이드 이펙트를 없애고 새로 만들어버림 (함수형의 패러다임에 어울리는 메소드인 것 같다.)
1 2 3 4
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)
Reference)
https://kotlinlang.org/docs/data-classes.html