C#의 Int64.GetHashCode() 메서드는 해당 인스턴스의 해시 코드(hash code)를 반환하는 데 사용됩니다. 해시 코드는 해시 테이블과 같은 자료구조에서 객체를 빠르게 검색하거나 비교할 때 활용되는 정수 값으로, 값 기반 비교 로직을 구현할 때 중요한 역할을 합니다.
구문(Syntax)
Int64.GetHashCode() 메서드의 기본 구문은 다음과 같습니다.
public override int GetHashCode ();
이 메서드는 매개변수를 받지 않으며, 현재 64비트 부호 있는 정수(long) 값에 대한 해시 코드를 int 타입으로 반환합니다.
예제 1
다음은 Int64.GetHashCode() 메서드를 사용하는 첫 번째 예제입니다. 서로 다른 두 long 값을 비교하고 각각의 해시 코드를 출력해 보겠습니다.
using System;
public class Demo {
public static void Main(){
long val1 = 8768768768;
long val2 = 7889765555;
Console.WriteLine("Value1 = "+val1);
Console.WriteLine("Value2 = "+val2);
Console.WriteLine("Are they equal? = "+val1.Equals(val2));
Console.WriteLine("Value1 (HashCode) = "+val1.GetHashCode());
Console.WriteLine("Value2 (HashCode) = "+val2.GetHashCode());
}
}출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Value1 = 8768768768 Value2 = 7889765555 Are they equal? = False Value1 (HashCode) = 178834178 Value2 (HashCode) = -700169038
예제 2
이번에는 0과 Int64.MaxValue(long 타입이 가질 수 있는 최댓값)를 사용한 또 다른 예제를 살펴보겠습니다.
using System;
public class Demo {
public static void Main(){
long val1 = 0;
long val2 = Int64.MaxValue;
Console.WriteLine("Value1 = "+val1);
Console.WriteLine("Value2 = "+val2);
Console.WriteLine("Are they equal? = "+val1.Equals(val2));
Console.WriteLine("Value1 (HashCode) = "+val1.GetHashCode());
Console.WriteLine("Value2 (HashCode) = "+val2.GetHashCode());
}
}출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Value1 = 0 Value2 = 9223372036854775807 Are they equal? = False Value1 (HashCode) = 0 Value2 (HashCode) = -2147483648
핵심 포인트 정리
- GetHashCode() 메서드는 객체의 값을 기반으로 하는 정수형(int) 해시 코드를 반환합니다.
- 두 값이 같으면 해시 코드도 항상 같지만, 해시 코드가 같다고 해서 두 값이 반드시 같은 것은 아닙니다(해시 충돌 가능성).
- 값 0의 해시 코드는 0이며,
Int64.MaxValue의 해시 코드는 -2147483648로 계산됩니다. - 해시 코드는 주로
Dictionary<TKey, TValue>,HashSet<T>등의 컬렉션에서 빠른 검색을 위해 내부적으로 활용됩니다.