[Java] 5.6.2 hashCode 메서드 (Object 클래스)

Object 클래스의 hashCode 메서드에서는 Java 플랫폼에서 특정 개체를 빠르게 검색할 수 있게 해쉬 테이블에 저장하는 것과 연관이 있습니다. hashCode는 해당 개체를 해쉬 테이블에 저장하였을 때 빨리 찾기 위한 해쉬 코드값을 반환하는 것입니다. 실제 프로그램 실행에서 서로 다른 개체가 같은 해쉬 코드값을 갖을 확률은 지극히 낮기 때문에 개체를 판별하는데 사용하는 이도 있지만 이는 완벽한 신뢰성을 보장한다고 볼 수는 없습니다. 확률적으로 같은 값을 반환하는 것이 낮은 것일 뿐 절대적인 것은 아니기 때문입니다.

물론 개발자는 이 hashCode 메서드를 재정의할 수 있습니다. 다음 예제에서는 정적 멤버로 seq를 선언하고 개체를 생성할 때마다 1씩 증가한 후에 개체의 멤버 hv 에 대입하였습니다. 그리고 hashCode 메서드를 재정의하여 유일한 값으로 사용할 수 있게 하였습니다.

그렇지만 이러한 방법을 추전하는 것은 아니며 이렇게 할 수도 있다는 것을 보여주는 것일 뿐입니다.

다음 코드는 hashCode 메서드 재정의 예제입니다.

//hashCode 메서드를 재정의
public class MyInt {
	static int seq=0;
	int value;
	int hv;
	public MyInt(int value){
		seq++;
		hv = seq;
		this.value = value;
	}	
	public int hashCode(){
		return hv;
	}
}
//hashCode 메서드 재정의 예
public class Program {
	public static void main(String[] args){
		MyInt mi1 = new MyInt(1);
		MyInt mi2 = new MyInt(1);
		System.out.println(mi1.hashCode());
		System.out.println(mi2.hashCode());
	}
}

실행 결과

1
2