Skip to content

Latest commit

ย 

History

History
80 lines (68 loc) ยท 3.23 KB

File metadata and controls

80 lines (68 loc) ยท 3.23 KB

Object.hashCode()

Returns a hash code value for the object.
This method is supported for the benefit of hash tables such as those provided by HashMap
  • ๊ฐ์ฒด์˜ ํ•ด์‹œ ์ฝ”๋“œ ๊ฐ’์„ ๋ฆฌํ„ดํ•ฉ๋‹ˆ๋‹ค.
  • ์ด ๋ฉ”์†Œ๋“œ๋Š” HashMap์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ HashTable์˜ ์ด์ ์„ ์œ„ํ•ด ์ง€์›๋ฉ๋‹ˆ๋‹ค.

์ฝ”๋“œ๋กœ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

package com.study.hashcode.equals

public class LikeLion {
    private String name;
    private int age;
    
    public LikeLion(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
    public String getName() {
        return name;
    }
    
    public int getAge() {
        return age;
    }
}
package com.study.hashcode.equals

public class Example01 {
    public static void main(String[] args) {
        Object obj = new Object();
        System.out.println("(1) ์ฐธ์กฐ๋ณ€์ˆ˜ obj ์ถœ๋ ฅ๊ฐ’: " + obj);
        System.out.println("(2) obj ๊ฐ์ฒด์˜ hashcode ์ถœ๋ ฅ๊ฐ’: " + obj.hashCode());
        
        LikeLion lion = new LikeLion("์•„๊ธฐ์‚ฌ์ž", 20);
        System.out.println("(3) ์ฐธ์กฐ๋ณ€์ˆ˜ lion ์ถœ๋ ฅ๊ฐ’: " + lion);
        System.out.println("(4) lion ๊ฐ์ฒด์˜ hashcode ์ถœ๋ ฅ๊ฐ’: " + lion.hashCode());
        
        String str1 = "๋ฉ‹์‚ฌ";
        System.out.println("(5) \"๋ฉ‹์‚ฌ\" ๊ฐ์ฒด์˜ hashcode ์ถœ๋ ฅ๊ฐ’: " + str1.hashCode());
    
        String str2 = "๋ฉ‹์‚ฌ";
        System.out.println("(6) \"๋ฉ‹์‚ฌ\" ๊ฐ์ฒด์˜ hashcode ์ถœ๋ ฅ๊ฐ’: " + str2.hashCode());
    }
}

์ถœ๋ ฅ ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

(1) ์ฐธ์กฐ๋ณ€์ˆ˜ obj ์ถœ๋ ฅ๊ฐ’: java.lang.Object@1540e19d
(2) obj ๊ฐ์ฒด์˜ hashcode ์ถœ๋ ฅ๊ฐ’: 356573597
(3) ์ฐธ์กฐ๋ณ€์ˆ˜ lion ์ถœ๋ ฅ๊ฐ’: com.study.hashcode.equals.LikeLion@677327b6
(4) lion ๊ฐ์ฒด์˜ hashcode ์ถœ๋ ฅ๊ฐ’: 1735600054
(5) "๋ฉ‹์‚ฌ" ๊ฐ์ฒด์˜ hashcode ์ถœ๋ ฅ๊ฐ’: 1527745
  • (1)์€ 16์ง„์ˆ˜, (2)๋Š” (1)์„ 10์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•œ ๊ฐ’์ž…๋‹ˆ๋‹ค.
  • ์„œ๋กœ ๋‹ค๋ฅธ ๊ฐ์ฒด๋Š” ๊ฐ๊ฐ์˜ ์ฃผ์†Œ๊ฐ’์„ ๊ฐ–๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ hashcode ๊ฐ’์„ ๊ฐ–์Šต๋‹ˆ๋‹ค.
  • (3)๋„ 16์ง„์ˆ˜, (4)๋Š” (3)์„ 10์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•œ ๊ฐ’์ž…๋‹ˆ๋‹ค.
  • ์ •๋ฆฌํ•˜๋ฉด, Object.hashCode() ๋ฉ”์†Œ๋“œ๋Š” ๊ฐ ๊ฐ์ฒด์— ๋Œ€์‘๋˜๋Š” ๊ณ ์œ ํ•œ ์ •์ˆ˜๊ฐ’์„ ๋ฆฌํ„ดํ•ฉ๋‹ˆ๋‹ค.

String์„ ์‚ดํŽด๋ณด์ž

  • ์œ„ ์˜ˆ์ œ์˜ hashCode() ๋ฉ”์†Œ๋“œ๋Š” Object ํด๋ž˜์Šค์— ์ •์˜๋œ ๋ฉ”์†Œ๋“œ์ž…๋‹ˆ๋‹ค.

    ๊ฐ์ฒด์˜ ์ฃผ์†Œ๊ฐ’๊ณผ ์—ฐ๊ด€์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • String ํด๋ž˜์Šค์˜ hashCode() ๋ฉ”์†Œ๋“œ๋Š” Overriding์„ ํ†ตํ•ด ์ƒˆ๋กญ๊ฒŒ ์ •์˜๋ฉ๋‹ˆ๋‹ค.
  • ์ด ์ƒˆ๋กญ๊ฒŒ ์ •์˜๋œ ๋‚ด์šฉ์— ๋”ฐ๋ฅด๋ฉด, ๊ฐ™์€ ๋ฌธ์ž์—ด์€ ๊ฐ™์€ hashcode ๊ฐ’์„ ๊ฐ–์Šต๋‹ˆ๋‹ค.

Why

  • String ํด๋ž˜์Šค์—์„œ hashCode() ๋ฉ”์†Œ๋“œ๋ฅผ Overridingํ•˜์ง€ ์•Š์œผ๋ฉด,
    String str1 = "๋ฉ‹์‚ฌ" ์™€ String str2 = "๋ฉ‹์‚ฌ" ์˜ hashcode๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๊ฐ’์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ทธ๋Ÿฐ๋ฐ String ํด๋ž˜์Šค ์ž…์žฅ์—์„œ str1๊ณผ str2๋Š” ๊ฐ™์€ ๋ฌธ์ž์—ด์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ™์€ ๊ฐ์ฒด๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ฐ™์€ ๋ฌธ์ž์—ด์„ ๊ฐ™์€ ๋‘ ๊ฐ์ฒด์˜ hashcode ๊ฐ’์ด ๋‹ค๋ฅด๋‹ค๋ฉด hashcode์˜ ์˜๋ฏธ๊ฐ€ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • hashcode ๊ฐ’์„ ํ™œ์šฉํ•ด Map์ด๋‚˜ Set์— ์ €์žฅ๋œ Key ๊ฐ’์„ ์ฐพ์•„์•ผ ํ•˜๋Š”๋ฐ,
    ๊ฐ™์€ ๊ฐ์ฒด์ž„์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  hashcode ๊ฐ’์ด ๋‹ค๋ฅด๋‹ˆ ์ œ๋Œ€๋กœ ์ฐพ์„ ์ˆ˜๊ฐ€ ์—†์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  • ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์—, ์ธ์œ„์ ์œผ๋กœ hashCode() ๋ฉ”์†Œ๋“œ๋ฅผ Overridingํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.