C#에서 Int64(long) 인스턴스의 해시 코드를 구하려면 GetHashCode() 메서드를 사용합니다. 이 메서드는 해당 정수 값에 대응하는 32비트 해시 코드를 int 형태로 반환하며, 해시 테이블이나 딕셔너리 같은 해시 기반 컬렉션에서 값을 빠르게 조회할 때 활용됩니다.
GetHashCode() 메서드란?
Int64.GetHashCode()는 현재 long 값에 대한 해시 코드를 반환하는 System 네임스페이스의 기본 제공 메서드입니다. 서로 다른 두 값은 일반적으로 서로 다른 해시 코드를 가지며, 같은 값은 항상 같은 해시 코드를 반환한다는 점을 기억해야 합니다.
예제 1: 두 개의 long 값 비교 및 해시 코드 출력
다음 예제에서는 두 개의 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
두 값이 서로 다르므로 Equals() 메서드는 False를 반환하며, 각 값마다 고유한 해시 코드가 생성되는 것을 확인할 수 있습니다.
예제 2: 0과 Int64.MaxValue의 해시 코드
이번에는 최솟값에 가까운 0과 Int64가 표현할 수 있는 최댓값인 Int64.MaxValue를 사용해 해시 코드를 살펴보겠습니다.
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
값 0의 해시 코드는 그대로 0이며, Int64.MaxValue(9223372036854775807)의 해시 코드는 int 범위 내의 값인 -2147483648로 변환되어 반환됩니다.
정리
GetHashCode()는 Int64(long) 값의 해시 코드를 int 타입으로 반환합니다.- 같은 값은 항상 동일한 해시 코드를 가지지만, 서로 다른 값이 반드시 다른 해시 코드를 가지는 것은 아닙니다.
- 해시 코드는 주로
Dictionary<TKey, TValue>,HashSet<T>등 해시 기반 자료구조에서 성능 최적화를 위해 사용됩니다.