hashcode

์ฝ”ํ‹€๋ฆฐ์—์„œ์˜ ๊ฐ์ฒด ๋น„๊ต

Reference

equals์™€ hashCode๋ฅผ ๊ฐ™์ด ์žฌ์ •์˜ํ•ด์•ผ ํ•˜๋Š” ์ด์œ 

์ฝ”ํ‹€๋ฆฐ์˜ ๊ฐ์ฒด ๋น„๊ต

fun main(args: Array<String>) {
    val c = Test("yap",10)
    val d = Test("yap",10)
    println(c==d)
    println(c===d)
}

class Test(
    val a: String,
    val b: Long
){

}

๊ฒฐ๊ณผ๊ฐ’

false
false

์ฝ”ํ‹€๋ฆฐ์—์„œ ==๋Š” ๋…ผ๋ฆฌ์  ๋™๋“ฑ์„ฑ ๋น„๊ต๋ฅผ, ===๋Š” ์ฃผ์†Œ ๋น„๊ต(๋ฌผ๋ฆฌ์  ๋™๋“ฑ์„ฑ ๋น„๊ต)๋ฅผ ํ•œ๋‹ค. Test class์—์„œ๋Š” equals(), hashcode()๊ฐ€ ์žฌ์ •์˜ ๋˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ ๊ฒฐ๊ณผ๊ฐ’๋“ค์ด false๊ฐ€ ๋‚˜์˜จ๋‹ค. data๋ฅผ ์„ ์–ธํ•œ ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ๋ณด์ž.

fun main(args: Array<String>) {
    val c = Test("yap",10)
    val d = Test("yap",10)
    println(c==d)
    println(c===d)
}

data class Test(
    val a: String,
    val b: Long
){

}

๊ฒฐ๊ณผ๊ฐ’

true
false

Test ํด๋ž˜์Šค์— data๋งŒ ๋ถ™์ธ ๊ฒƒ์œผ๋กœ ๊ฐ์ฒด ๋‚ด๋ถ€ ๊ฐ’์˜ ๋น„๊ต๊ฐ€ ๊ฐ€๋Šฅํ•ด์กŒ๋‹ค. ์ด data class๋Š” dto์—์„œ ์ž์ฃผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฏ€๋กœ ์œ ๋…ํ•ด๋‘์–ด์•ผ ํ•œ๋‹ค.

(์ฐธ๊ณ ๋กœ ์ฝ”ํ‹€๋ฆฐ์—์„œ ==๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ equals()๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.)

๋˜ํ•œ, data class์˜ hashcode๋Š” ๋…ผ๋ฆฌ์  ๊ฐ’์ด ๊ฐ™๋‹ค๋ฉด ๊ฐ™์€ ๊ณ ์œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ฆ‰, ์œ„์˜ c.hashCode()์™€ d.hashCode()๋Š” ๊ฐ™์€ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ผ๋ฐ˜ class์˜ hashcode๋Š” ๋…ผ๋ฆฌ์  ๊ฐ’์ด ๊ฐ™์•„๋„ ๋‹ค๋ฅธ ๊ณ ์œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•  ๊ฒƒ์ด๋‹ค.

๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  println(c===d)์˜ ๊ฒฐ๊ณผ๊ฐ’์ด false๊ฐ€ ๋‚˜์˜ค๋Š” ๊ฒƒ์€ hashCode()๋Š” ๊ฐ™์ง€๋งŒ ์‹ค์ œ ์ฃผ์†Œ๊ฐ’์€ ๋‹ค๋ฅด๊ธฐ์— ๊ทธ๋ ‡๋‹ค.

data class๋Š” equals, hashcode ๋ฉค๋ฒ„๋งŒ deriveํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋‹ค๋ฅธ ์ž์ฃผ ์“ฐ๋Š” toString(), componentN(), copy()๋„ deriveํ•ด์ค€๋‹ค.

์ฝ”ํ‹€๋ฆฐ ๊ณต์‹๋ฌธ์„œ : https://kotlinlang.org/docs/data-classes.html

Last updated