티스토리 뷰

데이터 클래스

  • 자바에서 TO나 VO와 같이 아무런 동작은 하지않고 오로지 데이터를 나르는 역할을 하는 클래스가 존재함.
  • 위의 클래스들은 IDE를 통해 만들거나 외부 라이브러리(lombok)로 컴파일 타임에 만든다.
  • 코틀린에서는 외부 라이브러리를 사용하지 않고 data class라는 클래스를 제공한다.
import java.time.LocalDateTime

data class Person(val name: String, val age: Int, val birthDay: LocalDateTime)

 

  • 데이터 클래스는 아래와 같은 멤버를 컴파일 타임에 자동으로 생성한다. 
1. equals(), hashCode()
2. toString() - Person(name=park jin, age=31, birthDay=2019-06-22T18:48:58.866) 형식
3. 프로퍼티 선언 순서에 따라 프로퍼티별로 대응하는 componentN() 함수
4. copy() 함수
  • 위 함수들은 몸체내에 수동으로 정의시 생성되지 않는다.
  • 데이터 클래스를 정의하기 위해서는 다음을 충족해야한다.
1. 주요 생성하는 하나 이상의 파라미터가 필요하다.
2. 모든 주요 생성자 파라미터는 var, val로 지정되야 한다.
3.  데이터 클래스는 추상, open, 실드, 내부(inner)일 수 없다.
4.  데이터 클래스는 다른 클래스를 확장할 수 없다(인터페이스 구현은 된다)

 

  • 파라미터가 없는 생성자를 필요로 할 경우 주요생성자의 모든 프로퍼티에 기본값을 할당한다.
import java.time.LocalDateTime

data class Person(val name: String = "no name", val age: Int = 0, val birthDay: LocalDateTime = LocalDateTime.now())

fun main() {
    val parkJin = Person()
    println(parkJin) // Person(name=no name, age=0, birthDay=2019-06-22T18:55:14.710)
}

 

복사 - copy()

  • 객체 프로퍼티중 일부만 변경하고 나머지는 그대로 사용하고 싶거나 기존 객체의 데이터를 그대로 복사시 사용한다.
data class Person(val name: String = "no name", val age: Int = 0)

fun main() {
    val parkJin = Person("park jin", 31)
    println(parkJin) // Person(name=park jin, age=31)

    val kidMilli = parkJin.copy(name = "kid milli")
    println(kidMilli) // Person(name=kid milli, age=31)
}

 

데이터 클래스와 분해 선언

data class Person(val name: String = "no name", val age: Int = 0)

fun main() {
    val parkJin = Person("park jin", 31)

    // 프로퍼티 순서에 맞춰야한다.
    val (name, age) = parkJin

    println("name : $name, age : $age") // name : park jin, age : 31
}

표준 데이터 클래스

  • 표준라이브러리는 PairTriple을제공한다
  • 프로퍼티가 많은 경우에는 data class를 사용하여 가독성을 높이는 것이 좋다.
fun main() {
    val pair = Pair("park jin", 31)
    val triple = Triple("park jin", 31, LocalDateTime.now())

    println(pair) // (park jin, 31)
    println(triple) // (park jin, 31, 2019-06-22T19:04:49.520)

    val (pairName, pairAge) = pair
    val (tripleName, tripleAge, tripleBirthDay) = triple

    // pairName : park jin, pairAge : 31
    println("pairName : $pairName, pairAge : $pairAge")
    
    // tripleName : park jin, tripleAge : 31, tripleBirthDay : 2019-06-22T19:04:49.520
    println("tripleName : $tripleName, tripleAge : $tripleAge, tripleBirthDay : $tripleBirthDay")
}

 


출처

https://javacan.tistory.com/entry/kotlin-11-12-ko-reference

 

코틀린 1.1 / 1.2 한글 레퍼런스 PDF 문서

코틀린 1.2 한글 레퍼런스 문서. 일부 내용(자바스크립트 관련 등)을 생략했고, 내용에 오류가 존재할 수 있음. 코틀린 1.1 한글 레퍼런스 문서. 일부 내용(자바스크립트 관련 등)을 생략했고, 내용에 오류가 존..

javacan.tistory.com

 

댓글