-
[KOTLIN] data classKOTLIN 2022. 9. 20. 19:13
data class를 사용하지 않을 때의 불편함
코틀린에서 Class를 생성할 때 Java language 스펙에 따라서 아래와 같은 메서드를 재정의해야 한다.
- toString()
class Dog(var name: String, var age: Int, var sex: String) { override fun toString(): String { return "Dog(name=$name, age=$age, sex=$sex" } }- equals()
class Dog(var name: String, var age: Int, var sex: String) { override fun toString(): String { return "Dog(name=$name, age=$age, sex=$sex" } override fun equals(other: Any?): Boolean { if(other == null || otehr !is Dog) return false return name == other.name && age == other.age && sex == other.sex } } // equals를 정의하지 않은 경우 fun main() { val dog1 = Dog("Brown", 3, "Female") val dog2 = Dog("Brown", 3, "Female") println(dog1 == dog2) // false } // equals를 정의한 경우 fun main() { val dog1 = Dog("Brown", 3, "Female") val dog2 = Dog("Brown", 3, "Female") println(dog1 == dog2) // true }- hasCode()
class Dog(var name: String, var age: Int, var sex: String) { override fun toString(): String { return "Dog(name=$name, age=$age, sex=$sex" } override fun equals(other: Any?): Boolean { if(other == null || otehr !is Dog) return false return name == other.name && age == other.age && sex == other.sex } // instance의 hash 값을 정의함. // 정의하지 않을 경우 equals 값이 같더라도 다른 객체로 분류함. override fun hashCode(): Int { return (name.hashCode() * 31 + age - sex.hashCode()) * 31 } } // hashCode를 정의하지 않은 경우 fun main() { val dogSet = hashSetOf(Dog("Brwon", 3, "Female") println(dogSet.contains(Dog("Brown", 3, "Female") // false } // hashCode를 정의한 경우 fun main() { val dogSet = hashSetOf(Dog("Brwon", 3, "Female") println(dogSet.contains(Dog("Brown", 3, "Female") // true }data class의 이점
Kotlin에서 Data Class는 위 3개의 메서드를 자동으로 정의해 주기 때문에 단순한 properties만 가지는 클래스들은 data class로 정의하면 편하게 사용할수 있다.
'KOTLIN' 카테고리의 다른 글
[KOTLIN] SimpleDateFormat Date->String, String->Date (0) 2022.07.09 [KOTLIN] Sealed class (0) 2022.06.09 [KOTLIN] @JvmOverloads 어노테이션 (0) 2022.06.01 [ANDROID] Recycler View의 absoluteAdapterPosition vs getBindingAdapterPosition (0) 2022.01.12