Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- 코인거스름돈
- memory
- DynamicProgramming
- Kotlin
- Collection
- Dialog
- devicedriver
- Dokka
- 피보나치
- 리틀포레스트
- android
- DataStructure
- darkmode
- 피요모리2
- 보늬밤
- MFC
- stack
- math
- 제곱근
- WebView
- QoS
- 형변환
- 동적프로그래밍
- LRU
- synergy
- FirebaseAuth
- AfxMessageBox
- 쌓기게임
- Java
- SPI
Archives
- Today
- Total
퉁탕퉁탕 만들어보자
Data class 본문
반응형
java를 사용하면서 data 저장용으로만 사용되는 클래스를 만들어서 쓰는 일이 꽤 많다.
이때 java의 경우는 equals() 와 hashCode()를 override해서 재정의해주지 않으면, 모든 field값이 같더라도 비교연산이 제대로 수행되지 않는다.
kotlin에서는 data class를 제공하여 위 두 함수를 compiler가 알아서 만들어주기 때문에 좀더 편하게 작업이 가능하다.
사용법
data class User(val name: String, val age: Int)
*사용시 주의할점
primary constructor안에 있는 property 들에 대해서만 equals와 hashCode가 연산이 되기 때문에
property를 생성자에 만들어야한다.
data class Person(val name: String) {
var age: Int = 0
}
fun main() {
val person1 = Person("John")
val person2 = Person("John")
person1.age = 10
person2.age = 20
// 나이가 다른데 true로 나옴
println("person1 == person2: ${person1 == person2}")
}
*그 외 편리한점
1. toString() 도 알아서 만들어주는데, 이것도 디버깅할때 무지 편하게 쓸수있다.
data class Person(val name: String, val age: Int)
fun main() {
val person1 = Person("John", 30)
// 출력값: Person(name=John, age=30)
println("${person1.toString()}")
}
2. copy() 함수를 제공하여 손쉽게 object 생성이 가능하다. 특정 필드의 값만 바꾸는 것도 가능하다.
data class Person(val name: String, val age: Int)
fun main() {
val person1 = Person("John", 30)
println("${person1.toString()}")
//Person(name=John, age=30)
val clone = person1.copy()
println("${clone.toString()}")
// Person(name=John, age=30)
val babyClone = clone.copy(age=2)
println("${babyClone.toString()}")
// Person(name=John, age=2)
}
3. 구조분해 할당
이건 꼭 JS같은 느낌인데, 이런식으로 생성도 가능하다.
val jane = User("Jane", 35)
//name과 age에 각각 jane.name과 jane.age가 할당된다.
val (name, age) = jane
하지만 순서를 알고 써야하기 때문에 주의해서 잘 써야한다.
728x90
반응형
'Computer > Kotlin' 카테고리의 다른 글
Dokka 에서 SourceSet 설정하기 (0) | 2023.05.14 |
---|---|
Multi Module 프로젝트에서 Dokka 적용하기 (0) | 2023.05.13 |
Kotlin Generic (in, out) (0) | 2022.04.23 |
Sealed class (0) | 2022.04.17 |
loops (0) | 2022.03.31 |