728x90
반응형
얼마전 부터 sealed 내부에서 object를 사용하게 된다면
data object 사용을 권장하고 있는 점을 알게 되었습니다.
data object가 무엇인지 조사하고 학습한 내용을 정리한 글입니다. 😊
Object declarations and expressions | Kotlin
kotlinlang.org
1. data object에서 제공해주는 기능!
- toString() : data object의 이름을 반환합니다.
- equals() / hashCode() 를 이용해 동등성 검사를 할 수 있습니다.
단! custom equals() 또는 hashCode() 메서드를 구현할 수는 없습니다.
또한 equals() 메서드는 동일한 data object에서는 동일한 값을 반환하는 것이 보장됩니다.
fun main() {
println(Test) // com.seomseom.test.MainActivity$Test@366f00
println(Test1) // Test1
println(Test2) // Test2
println(Test1 == Test1) // true
}
object Test
data object Test1
data object Test2
2. data class와의 차이점
- data object는 singleton이기 때문에 copy 메서드를 지원해주지 않습니다.
- componentN() 메서드를 지원해주지 않기 때문에 구조분해 선언을 할 수 없습니다.
sealed interface ReadResult
data class Number(val number: Int): ReadResult
data class Text(val text: String): ReadResult
data object EndOfFile: ReadResult
fun main() {
println(Number(7)) // Number(number = 7)
println(EndOfFile) // EndOfFile
}
3. 결론
개인적으로 크게 object와 data object의 큰 차이점은 없는것 같지만,
디버깅이나 로그를 찍을 때 좀 더 간편하게 상태를 확인할 수 있는 장점이 있다고 생각합니다. 🤗
반응형
'Kotlin' 카테고리의 다른 글
[Coroutine] 코루틴 내부동작 분석해보기! (0) | 2023.03.27 |
---|---|
[Kotlin 공식문서 읽어보기] 코틀린과 채널 기본기 다지기! (0) | 2023.02.07 |
[Flow] 연산자 내부코드를 열어보자! (0) | 2023.01.28 |
[Equality] == vs. === (0) | 2023.01.28 |
[Kotlin] use (0) | 2022.05.14 |