본문 바로가기
Kotlin

[Kotlin 강의] 데이터 저장에 매우 편리한 Kotlin Data Class

by 뷰티풀스택 2025. 1. 22.
반응형

데이터 저장을 위한 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

 

반응형

댓글