C#에서 Int32.GetHashCode() 메서드는 현재 정수 인스턴스의 해시 코드(hash code)를 반환하는 메서드입니다. 해시 코드는 해시 테이블이나 딕셔너리(Dictionary) 같은 해시 기반 컬렉션에서 객체를 빠르게 조회할 때 활용되는 고유한 정수 값입니다.
문법(Syntax)
Int32.GetHashCode() 메서드의 기본 문법은 다음과 같습니다.
public override int GetHashCode ();
예제 1
첫 번째 예제를 통해 Int32.GetHashCode() 메서드가 어떻게 동작하는지 살펴보겠습니다. 이 예제에서는 int 자료형이 표현할 수 있는 최솟값인 Int32.MinValue와 일반적인 값 300을 사용합니다.
using System;
public class Demo {
public static void Main(){
int val1 = Int32.MinValue;
int val2 = 300;
Console.WriteLine("Value1 = "+val1);
Console.WriteLine("Value2 = "+val2);
Console.WriteLine("Are they equal? = "+val1.Equals(val2));
Console.WriteLine("HashCode for Value1 = "+val1.GetHashCode());
Console.WriteLine("HashCode for Value2 = "+val2.GetHashCode());
}
}실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Value1 = -2147483648 Value2 = 300 Are they equal? = False HashCode for Value1 = -2147483648 HashCode for Value2 = 300
출력 결과에서 확인할 수 있듯이, Int32 타입의 경우 해시 코드가 해당 정수 값 그대로 반환됩니다. 즉, 값이 -2147483648이면 해시 코드도 -2147483648입니다. 또한 두 값이 서로 다르므로 Equals 비교 결과는 False가 나타납니다.
예제 2
이번에는 두 변수가 같은 값을 가질 때의 동작을 확인해 보겠습니다.
using System;
public class Demo {
public static void Main(){
int val1 = 50;
int val2 = 50;
Console.WriteLine("Value1 = "+val1);
Console.WriteLine("Value2 = "+val2);
Console.WriteLine("Are they equal? = "+val1.Equals(val2));
Console.WriteLine("HashCode for Value1 = "+val1.GetHashCode());
Console.WriteLine("HashCode for Value2 = "+val2.GetHashCode());
}
}실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Value1 = 50 Value2 = 50 Are they equal? = True HashCode for Value1 = 50 HashCode for Value2 = 50
두 변수가 동일한 값 50을 가지고 있으므로 Equals 비교 결과는 True이며, 두 객체의 해시 코드 역시 모두 50으로 동일하게 반환됩니다.
핵심 포인트 정리
- Int32.GetHashCode() 메서드는 현재 정수 값에 대한 해시 코드를 반환합니다.
- C#에서 int(Int32) 타입의 해시 코드는 별도의 변환 없이 정수 값 자체와 동일합니다.
- 두 값이 같으면(Equals가 True) 반드시 해시 코드도 같아야 한다는 해시 코드의 기본 계약을 이 예제에서 확인할 수 있습니다.