Data class란?
데이터를 보관하는 목적을 가진 클래스입니다. 자바에서 DTO와 매우 유사합니다.
코틀린의 Data 클래스는 자동으로 많은 기능들을 생성해 줍니다.
data class User(val name: String, val age: Int)
자동으로 생성되는 함수들
data class는 컴파일러가 자동으로 다음 함수들을 생성합니다.
✅ equals() / hasCode()
일반 Class에서는 프로퍼티 값이 같다고 동등한 인스턴스라고 나오지 않습니다.
data class Person(val name: String, val age: Int)
val person1 = Person("철수",25)
val person2 = Person("영희", 20)
val person3 = Person("영희",20)
println(person1==person2)
println(person2==person3) //프로퍼티 값들이 같으면 같은 객체입니다.
✅ toString()
data class Person(val name: String, val age: Int)
val person1 = Person("철수",25)
println(person1) //Person(name=철수, age=25)
✅ copy() - 불변 객체 수정
data class Person(val name: String, val age: Int)
val person1 = Person("철수",25)
val person2 = person1.copy("영철",17)
✅ componentN() - 구조 분해
data class Person(val name: String, val age: Int)
//구조분해 예시
val person1 = Person("짱구",5)
val (name, age) = person1
println("이름 $name, 나이 $age") //짱구 , 5
//componentN 함수 사용
val name2 = person1.component1() //첫 번째 프로퍼티 값 반환
println(name2) //짱구 출력됨
Data Class의 규칙
1. 주 생성자에는 최소 1개 이상의 매개변수가 존재해야 합니다.
2. 매개변수는 val 또는 var 이어야 합니다. 일반 매개변수는 안됩니다.
3. abstract, open, sealed, inner 불가합니다.
4. 하지만 인터페이스 구현이나 클래스 상속은 가능합니다.