본문 바로가기

개발 일기/주소단축 프로그램

String에 .hashcode()를 적용하면, 다른 값을 반환할까?

주소 단축 프로그램(웹)을 제작하던 중, 원래의 긴 주소를 짧은 주소를 변환하는 과정이 존재한다.

이 과정에서 짧은 주소는 긴 주소하나에 유일하게 대응되어야 한다.

하지만, 해시함수에 대해 아는 바가 없어 일단, hashcode()를 생각하게 되었다.

내가 아는 hashcode()는 각자 다 다른 값을 배정해준다고 알고 있었는데, 문득 찝찝해졌다.

 


Hashcode() ?

hashCode는 두 객체가 같은 객체인지 확인하는 Method입니다.

 

Hashcode 메소드의 내부입니다. int형으로 반환되는 것을 보실 수 있는데, int 형은 4byte입니다.

따라서, 0부터 0xFFFFFFFF(4,294,967,295)까지 만큼의 숫자를 반환할 수 있는데,

String의 갯수가 과연 저 안에서 끝날까요? 절대 아닙니다.

따라서, 내려진 결론은 'String의 경우 다른 문자열이여도 같은 해시값을 가질 수 있다' 입니다.

 

 

+) 그렇다면, 기존 HashMap은 어떻게 작동하는데요?

기존 HashMap의 경우, key의 hashCode뿐만 아니라, 기존 key들의 equals()까지 검사해서 만족한다면 덮어쓰게 됩니다.


결론 : '완벽한 1:1대응을 위해선 hashcode는 지양하고, 다른 방법(해시알고리즘 SHA256?)들을 찾아 사용해야한다!

다음 포스팅은 아마 해시알고리즘이 될 듯...?