클래스의 기본 메소드를 재정의할 수 있다. toString, equals, hashCode
1. toString
class Person(var name: String, var age: Int)
fun main(){
val kim = Person("Kim", 18)
println(kim) //Person@1be6f5c3
}
원래는 이렇게 객체를 출력하면 객체이름과 이상한 값이 나온다. 이걸 toString() 메소드를 재정의해서 출력해보자.
class Person(var name: String, var age: Int) {
override fun toString(): String {
return "Person(name='$name', age=$age)"
}
}
fun main(){
val kim = Person("Kim", 18)
println(kim) //Person(name='Kim', age=18)
}
이렇게 toString()을 재정의해서 실제 객체 내부의 있는 값을 출력해줄 수 있다. kim.toString()을 하지 않아도 기본 값으로 출력을 하면 toString()이 자동적으로 호출된다.
2. equals
class Person(var name: String, var age: Int) {
}
fun main(){
val kim = Person("Kim", 18)
val kim2 = Person("Kim", 18)
println(kim == kim2) //false
}
우리가 보기에는 같지만 코틀린에서 보기에는 서로 다른 객체이기 때문에 다르다고 판단한다. equals()를 이용해서 해결해보자.
class Person(var name: String, var age: Int) {
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (other !is Person) return false
if (name != other.name) return false
if (age != other.age) return false
return true
}
}
fun main(){
val kim = Person("Kim", 18)
val kim2 = Person("Kim", 18)
println(kim == kim2) //false
}
이렇게 우리가 직접 equals 메소드를 재정의해서 우리가 원하는 값들이 일치하면 true를 보내도록 설정할 수 있다.
3. hashCode
해쉬코드: 객체의 고유한 숫자 값이다.
우리가 위에서 equals를 재정의하기 전에는 해쉬코드까지 비교를 했기 때문에 비교를 했을 때 다르다고 나온 것이다.
사실 객체가 동일하다는 것은 해쉬코드도 같다는 것이기 때문에 객체끼리 비교하는 경우 해쉬코드도 동일한지 확인해야한다.
class Person(var name: String, var age: Int) {
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (other !is Person) return false
if (name != other.name) return false
if (age != other.age) return false
return true
}
override fun hashCode(): Int {
var result = name.hashCode()
result = 31 * result + age
return result
}
}
fun main(){
val kim = Person("Kim", 18)
val kim2 = Person("Kim", 18)
println(kim == kim2) //false
}
이렇게 해쉬코드도 비교하는 과정을 재정의할 수 있다.
'2학년 2학기 > 모바일 소프트웨어 - 코틀린' 카테고리의 다른 글
Class(2) - 범위 함수 (0) | 2024.10.11 |
---|---|
Class(2) - data class (0) | 2024.10.11 |
Class(2) - Object (0) | 2024.10.11 |
익명 함수 (1) | 2024.10.11 |
확장함수(Extension Funtions) (1) | 2024.10.11 |