Kotlin (코틀린)
Kotlin in A..Z (21) - 데이터 클래스
강태종
2020. 7. 17. 16:46
데이터 클래스 (DTO)
자바에서는 POJO라고 부르는 개념이다. 특정 동작을 하지 않고 오로지 데이터 전달을 위한 목적의 클래스이면 클래스에서 필요없는 기능을 제외하여 리소스를 효과적으로 활용할 수 있다.
데이터 클래스가 자동으로 가지는 메서드
- 프로퍼티를 위한 getter, setter
- equals()
- hashCode()
- toString()
- copy()
- 프로퍼티에 상응하는 component1(), component2() ....
데이터 클래스의 조건
- 주 생성자는 최소 하나 이상의 프로퍼티를 가져야 한다.
- 주 생성자의 모든 매개변수는 val, var로 지정된 프로퍼티여야 한다.
- 데이터 클래스는 abstract, open, sealed, inner 키워드를 사용할 수 없다.
객체 디스트럭처링 (Destructuring)
객체가 가지고 있는 프로퍼티를 개별 변수로 분해하여 할당하는 작업
소괄호를 이용한 디스트럭처링
코드
data class Something(val id:Long = 0, val name:String = "") {
}
fun main() {
val (id, name) = Something(1, "개발일지")
println("Name : $name")
println("ID : $id")
}
결과
Name : 개발일지
ID : 1
특정 프로퍼티 제외 (_)
코드
data class Something(val id:Long = 0, val name:String = "") {
}
fun main() {
val (_, name) = Something(1, "개발일지")
println("Name : $name")
}
결과
Name : 개발일지
componentN 메서드를 사용한 디스트럭처링
코드
data class Something(val id:Long = 0, val name:String = "") {
}
fun main() {
val something = Something(1, "개발일지")
val id = something.component1()
val name = something.component2()
println("Name : $name")
println("ID : $id")
}
결과
Name : 개발일지
ID : 1
컨테이너에 포함된 객체 디스트럭처링
코드
data class Something(val id:Long = 0, val name:String = "") {
}
fun main() {
val something1 = Something(1, "개발일지")
val something2 = Something(2, "Kang")
val something3 = Something(3, "Tae")
val something4 = Something(4, "Jong")
val list = listOf(something1, something2, something3, something4)
for((id, name) in list) {
println("Name : $name")
println("ID : $id")
}
}
결과
Name : 개발일지
ID : 1
Name : Kang
ID : 2
Name : Tae
ID : 3
Name : Jong
ID : 4