더북(TheBook)

HashMapHashSet

data 클래스를 만들면 객체를 HashMap이나 HashSet에 넣을 때 키로 사용할 수 있는 해시 함수를 자동으로 생성해준다.

DataClasses/HashCode.kt

package dataclasses
import atomictest.eq

data class Key(val name: String, val id: Int)

fun main() {
  val korvo: Key = Key("Korvo", 19)
  korvo.hashCode() eq -2041757108
  val map = HashMap<Key, String>()
  map[korvo] = "Alien"
  map[korvo] eq "Alien"
  val set = HashSet<Key>()
  set.add(korvo)
  set.contains(korvo) eq true
}

HashMap이나 HashSet에서는 HashCode()equals()와 함께 사용해 Key를 빠르게 검색한다. 올바른 HashCode()를 직접 작성하는 건 까다롭고 실수하기도 쉬운데, 이런 일을 data 클래스가 대신 해주면 꽤 편리하다. ‘아톰 82, 연산자 오버로딩’에서 equals()HashCode()를 자세히 다룰 것이다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.