본문 바로가기
자바

HashCode

by dev_jisu 2023. 3. 23.

HashCode란 해시 함수의 값 / 해시 함수를 통해 객체비교를 하기위한 값입니다. 

hashCode()가 필요한 이유는 객체 비교를 하는 시간 때문 ! 

 

만약 equals()Integer가 아닌 객체를 비교 할 경우 

생가보다 많은 시간이 걸립니다 .게다가 객체의 수가 많아질 경우 더욱 많은 시간을 쓰게 됩니다. 

 

이때 hashcode()는 정수로 이뤄져있어 객체를 비교할 때에도 정수로 비교가 가능합니다 .

 

String Str1 = "hello";

String Str 2= "hello";

String Str3 = new String("hello");

 

Str1과 2는 같은 해시값을 가지지만 Str3은 다른 Hash값을 가집니다. 

 

이유는 1과 2는 같은 오브젝트를 가리키기 떄문이고 3은 다른 객체를 가리키기 때문인데 

사실 우리는  3 또한 같은 오브젝트에 같은 값을  가져 equals() 함수를 사용할경우 

True가 나오길 원합니다 .

 

이때 우리는 hashcode() 함수를 사용하는데 이때 규약이 

3) hashCode의 규약

  • 어떤 객체를 변경하지 않았다면, hashCode는 여러번 호출해도 그 결과는 항상 같아야 한다.
  • equals 메서드의 실행 결과로 두 객체가 같다고 나온다면, hashCode 메서드의 호출 결과도 같아야 한다.

그래서 hashcode() 오버라이딩 해주면 equals()함수도 오버라이딩 해줘야 한다 . 

규약은 아니지만 hash 값은 hashFunction을 통해 값을 만들기에 같은 값을 가지고 있을수 있는데 

이를 최대한 없이 만드는게 시간복잡도면에서 좋다 . 

 

Hash의 장점은 시간복잡도가 O(1) 이라는 것인데  같은 해시값을 가질수록 선형검색에 가까워지므로 

hashcode를 정의 할때 최대한 같은 값이 나오지 않게 재정의 해주는게 중요하다 . 

 

 

'자바' 카테고리의 다른 글

Array/List / Set  (0) 2023.03.16
Generic 사용 이유  (0) 2023.03.16

댓글