특징
- 데이터를 다루는데 최적화된 클래스다.
- 다양한 메소드를 자동으로 생성한다.
- toString()
- copy()
- hashCode()
- equals()
- componentN()
- 다른 클래스를 상속받을 수 없다.
메소드
toString()
- 객체가 가지는 프로퍼티의 값들이 출력된다.
- 기존 자바에서는 toString 메소드를 오버라이딩해야한다.
data class User(
val id: String,
var name: String?
)
fun main(){
var user = User("1", "abbiddo")
print(user) // User(id=1, name=abbiddo)
}
copy()
- 객체 복사 시 특정 필드의 값만 바꿔 복사할 수 있다.
data class User(
val id: String,
var name: String?
)
fun main(){
val user = User("1", "abbiddo")
val user2 = user.copy(id = "2")
print(user2) // User(id=2, name=abbiddo)
}
hashCode()
- 프로퍼티의 값이 완전히 같은 두 Data Class는 같은 hashCode를 가진다.
- 일반 클래스라면 다른 값을 갖는다.
data class User(
val id: String,
var name: String?
)
fun main(){
val user = User("1", "abbiddo")
val user2 = User("1", "abbiddo")
println(user.hashCode()) // -1207065418
println(user2.hashCode()) // -1207065418
}
equals()
- '==' 연산자로 두 객체의 프로퍼티가 같은지를 확인한다.
- '===' 연산자로 두 객체가 같은 객체인지 확인한다.
data class User(
val id: String,
var name: String?
)
fun main(){
val user = User("1", "abbiddo")
val user2 = User("1", "abbiddo")
println(user == user2) // true
println(user === user2) // false
}
componentN()
- Data Class는 기본적으로 componentN 메소드가 생성이되어, 각 프로퍼티에 번호가 붙는다.
- 해당 번호로 구조 분해가 가능한 형태가 된다.
- 프로퍼티 개수 만큼의 변수에 객체를 할당하면 내부에서 자동으로 실행된다.
data class User(
val id: String,
var name: String?
)
fun main(){
val user = User("1", "abbiddo")
println(user.component1()) // 1
println(user.component2()) // abbiddo
val (id, name) = user
println(id) // 1
println(name) // abbiddo
}
'Programming > Kotlin' 카테고리의 다른 글
[Kotlin] 코틀린 기본 문법: 범위 지정 메소드와 레이블 (0) | 2024.01.09 |
---|---|
[Kotlin] 코틀린 기본 문법: null safety, 널 안정성 (0) | 2024.01.08 |
[Kotlin] 코틀린 기본 문법: 포함 연산자와 동등성 (1) | 2024.01.08 |
[Kotlin] 코틀린 기본 문법: 변수와 입출력 (0) | 2024.01.08 |
[Kotlin] 코틀린 장점과 특징 (vs 자바) (0) | 2023.12.28 |