티스토리 뷰
728x90
데이터 클래스
- 자바에서 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
}
표준 데이터 클래스
- 표준라이브러리는 Pair와 Triple을제공한다
- 프로퍼티가 많은 경우에는 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
728x90
'개발 언어 > 코틀린' 카테고리의 다른 글
코틀린(Kotlin) | 클래스 - 중첩 클래스와 내부 클래스 (0) | 2019.06.24 |
---|---|
코틀린(Kotlin) | 제네릭 (Generic) (0) | 2019.06.23 |
코틀린(Kotlin) | object (like static) (0) | 2019.06.22 |
코틀린(Kotlin) | 클래스 - 확장 함수와 확장 프로퍼티 (0) | 2019.06.22 |
코틀린(Kotlin) | 클래스 - 가시성 제한자 (0) | 2019.06.22 |
댓글