들어가기 전에
우리는 많은 데이터를 서로 주고 받으며 살고 있지요? 오로지 데이터 저장에 초점을 맞추기 위해 코틀린에서는 데이터(data) 클래스라는 특별히 고안된 클래스를 제공합니다. 그럼 시작해봅시다.
핵심 키워드
- 데이터 클래스(data class)
- data
- DTO(Data Transfer Object)
학습하기
들어가기 전에
우리는 많은 데이터를 서로 주고 받으며 살고 있지요? 오로지 데이터 저장에 초점을 맞추기 위해 코틀린에서는 데이터(data) 클래스라는 특별히 고안된 클래스를 제공합니다. 그럼 시작해봅시다.
핵심 키워드
학습하기
데이터 전달을 위한 데이터 클래스
보통 데이터 전달을 위한 객체를 DTO(Data Transfer Object)라고 부릅니다. 자바에서는 POJO(Plain Old Java Object)라고 불리기도 했습니다. DTO는 구현 로직을 가지고 있지 않고 순수한 데이터 객체를 표현하기 때문에 보통 속성과 속성을 접근하고자 하는 게터/세터를 가집니다. 여기에 추가적으로 toString(), equals() 등과 같은 데이터 표현하거나 비교하는 메서드를 가져야 합니다. 자바에서 이것들을 모두 정의하려면 소스 코드가 아주 길어지게 되지만 코틀린에서는 간략하게 표현할 수 있습니다.
데이터 클래스를 위해 data 키워드가 제공하며 다음과 선언할 수 있습니다.
data class Customer(var name: String, var email: String)
데이터 클래스는 다음과 같은 조건을 만족해야 합니다.
데이터 클래스로 부터는 open을 사용한 상속이나 abstract의 추상 클래스, 내부 클래스를 위한 inner 등을 사용할 수 없고 오로지 데이터를 기술하기 위한 용도로만 사용됩니다. 하지만 필요하다면 추가로 부 생성자나 init 블록을 넣어 데이터를 위한 간단한 로직을 포함할 수 있습니다.
객체 디스트럭처링하기
디스트럭처링(destructuring)한다는 것은 객체가 가지고 있는 프로퍼티를 개별 변수들로 분해하여 할당하는 것을 말합니다. 변수를 선언할 때 소괄호를 사용해서 분해하고자 하는 객체를 지정합니다.
val (name, email) = cus1
println("name = $name, email = $email")
http://www.yes24.com
comment
디스트럭처링할 때 분해하려는 프로퍼티명과 동일한 변수명을 사용해야 하나요? 아니면 순서만 같게 하면 되는 건가요 ?
혹, 가져오려는 프로퍼티값을 다른 변수명에 디스트럭처링하려면 어떻게 해야 하나요 ?