개발일지

Kotlin in A..Z (21) - 데이터 클래스 본문

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

 

Comments