반응형
데이터 저장을 위한 Kotlin Data Class
1. data class 생성 방법
- 클래스 헤더 내에 변수를 val, var 중에 하나로 지정하고 타입을 지정해준다.
- 데이터 저장만을 위해 사용한다면 { } 내부를 구현할 필요도 없다.
- 이 경우 { } 표시도 생략할 수 있다.
data class User(val id: Int, var name: String)
2. 클래스 프린트 기능
생성된 인스턴스를 생성한뒤 프린트를 해보면 클래스는 해시코드로 표시되지만,
데이터 클래스는 내부 프로퍼티까지 모두 읽기 쉬운 형태로 표시된다.
class Contact(val id: Int, var email: String = "abc@abc.com") {
val position = "developer"
fun printEmail() = println(email)
val printId = { println(id) }
}
data class User(val id: Int, val name: String)
fun main() {
val contact = Contact(1, "abc@abc.com")
println(contact)
val user = User(1, "John")
println(user)
}
--
Contact@cc34f4d
User(id=1, name=John)
3. data class 비교 특징
클래스 비교와 다르게 데이터 클래스의 특징은 인스턴스가 다르더라도 내용물이 같으면 true로 평가한다.
클래스 비교
val contact1 = Contact(1, "aaa@abc.com")
val contact2 = Contact(1, "aaa@abc.com")
println("contact1 == contact2 is ${contact1 == contact2}")
---
contact1 == contact2 is false
데이터 클래스 비교
val user1 = User(1, "John")
val user2 = User(1, "John")
val user3 = User(2, "John")
println("user1 == user2 is ${user1 == user2}")
println("user1 == user3 is ${user1 == user3}")
---
user1 == user2 is true
user1 == user3 is false
4. data class copy 특징
data class가 이미 만들어져 있고 다른 프로퍼티는 그대로 사용하고 일부의 프로퍼티만 변경해서 사용하고 싶을 때 유용한 기능이다.
- copy를 하였더라도 copy 하면서 일부 프로퍼티를 변경을 시켰다면 다른 인스턴스로 인식한다.
- 물론, 아무런 변경을 하지 않고 copy만 하였다면 같은 것으로 판단한다.
val user1 = User(1, "John")
val user4 = user1.copy(id = 4)
val user5 = user1.copy()
println("user4 is $user4")
println("user1 == user4 is ${user1 == user4}")
println("user1 == user5 is ${user1 == user5}")
--
user4 is User(id=4, name=John)
user1 == user4 is false
user1 == user5 is true
반응형
'Kotlin' 카테고리의 다른 글
[Kotlin 강의] Null Safety 설명 (0) | 2025.01.22 |
---|---|
[Kotlin 강의] Class 쉬운 설명 (0) | 2025.01.22 |
[Kotlin 강의] Lambda 함수 Return Type 표현 방법 (0) | 2025.01.22 |
[Kotlin 강의] 함수 표현식 총정리 fun, lambda (0) | 2025.01.22 |
[Kotlin 강의] Range 사용법 (0) | 2025.01.22 |
댓글