본문 바로가기
2학년 2학기/모바일 소프트웨어 - 코틀린

Class(2) - 클래스의 기본 메소드 정의

by print_soo 2024. 10. 11.

클래스의 기본 메소드를 재정의할 수 있다. 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