[코틀린기초] 32. 데이터 클래스
데이터 전달을 위한 객체 DTO (data tranfer object)
자바에서는 POJO라고 불리기도 함
구현 로직을 가지고 있지 않고 순수한 데이터 객체를 표현
데이터를 접근하는 게터/세터를 포함
toString, equals 등과 같은 데이터 표현 및 비교 메서드 포함
자바로 DTO를 표현하면 데이터 필드, 게터/세터, 데이터 표현 및 비교 메서드들을 모두 작성해야된다.
코틀린으로 DTO를 표현하면 프로퍼티만 신경써서 작성하면 나머지는 내부적으로 자동 생성이 된다!
자동 생성되는 메서드들은 다음과 같다
- 게터/세터
- equals, hashcode
- toString
- copy
- 프로퍼티에 상응하는 component1(), component2() 등
데이터 클래스의 선언
data 키워드를 사용해 정의한다
data class Customer(var name:String, var email:String)
간단한 로직은 부 생성자(constructor)나 init 블록을 이용하여 넣을 수 있다.
데이터 클래스의 조건
- 주 생성자는 최소한 하나의 매개변수를 가져야 한다.
- 주 생성자의 모든 매개변수는 val, var로 지정된 프로퍼티여야한다.
- 데이터 클래스는 abstract, open, sealed, inner 키워드 사용이 불가능하다!!
객체 디스트럭처링
객체가 가지고 있는 프로퍼티를 개별 변수들로 분해
val (name, email) = cus1
println("name = $name, email = $email")
#### 특정 프로퍼티를 가져올 필요가 없는 경우
val (_, email) = cus1
#### componentN() 메서드 이용
val name2 = cus1.component1()
val email2 = cus1.component2()
#### 객체 데이터가 많은 경우 for문의 활용
val cus1 = Customer("Sean", "sean@mail.com")
val cus2 ...
...
val customers = listOf(cus1,cus2,...) // 모든 객체를 컬렉션 list형태로 구성한다!
for((name, email) in customers){ // 반복문으로 모든 객체의 프로퍼티를 디스트럭쳐링
println("name = $name, email = $email")
}
#### 람다식을 사용하는 경우
val myLamde = {
(nameLa, emailLa): Customer ->
println(nameLa)
println(emailLa)
}
myLamda(cus1)