[kotlin] 코틀린에서의 해시 타입 변환 함수

코틀린은 객체를 해시 타입으로 변환하는 기능을 제공합니다. 해시 타입은 객체를 고유한 값으로 변환하여 효율적인 데이터 구조를 구성하는데 사용됩니다. 이번 포스트에서는 코틀린에서 해시 타입 변환 기능을 사용하는 방법에 대해 알아보겠습니다.

hashCode() 함수

코틀린에서 객체를 해시 타입으로 변환하기 위해 사용하는 주요 함수는 hashCode() 함수입니다. hashCode() 함수는 Any 클래스에 정의되어 있으며, 기본적으로 객체의 주소 값을 반환합니다. 따라서 동일한 객체에 대해서는 항상 동일한 해시 코드가 생성됩니다.

data class Person(val name: String, val age: Int)

fun main() {
    val person = Person("Alice", 25)
    val hashCode = person.hashCode()
    println("Hash code: $hashCode")
}

위 예제에서 Person 클래스의 객체 person을 해시 타입으로 변환하기 위해 hashCode() 함수를 호출하고, 결과를 출력합니다.

사용자 정의 hashCode() 함수

hashCode() 함수는 기본적으로 객체의 주소 값을 반환하지만, 필요에 따라 사용자가 직접 정의할 수 있습니다. 일반적으로 객체의 필드 값을 조합하여 고유한 해시 값을 생성하는 방식을 사용합니다.

data class Person(val name: String, val age: Int) {
    override fun hashCode(): Int {
        return name.hashCode() + age.hashCode()
    }
}

fun main() {
    val person = Person("Alice", 25)
    val hashCode = person.hashCode()
    println("Hash code: $hashCode")
}

위 예제에서 Person 클래스에 hashCode() 함수를 오버라이딩하여 이름(name)과 나이(age)의 해시 값을 조합하여 반환하도록 설정합니다.

equals() 함수와 함께 사용하기

해시 타입을 사용하기 위해서는 hashCode() 함수뿐만 아니라 equals() 함수도 함께 구현해야 합니다. 이 두 함수는 함께 사용되어 객체의 동등성을 판단하는데 사용됩니다.

data class Person(val name: String, val age: Int) {
    override fun hashCode(): Int {
        return name.hashCode() + age.hashCode()
    }

    override fun equals(other: Any?): Boolean {
        if (other === this) return true
        if (other !is Person) return false
        return name == other.name && age == other.age
    }
}

fun main() {
    val person1 = Person("Alice", 25)
    val person2 = Person("Alice", 25)
    val person3 = Person("Bob", 30)

    println(person1 == person2) // true
    println(person1 == person3) // false
}

위 예제에서는 equals() 함수를 오버라이딩하여 이름과 나이가 동일한 경우에만 true를 반환하도록 설정합니다.

참고 자료