C#의 Int16.GetHashCode() 메서드는 현재 인스턴스(16비트 부호 있는 정수 값)에 대한 해시 코드를 반환하는 데 사용됩니다. 해시 코드는 주로 해시 테이블과 같은 해시 기반 컬렉션에서 객체를 빠르게 조회할 때 활용됩니다.
문법(Syntax)
Int16.GetHashCode() 메서드의 기본 문법은 다음과 같습니다.
public override int GetHashCode ();
이 메서드는 매개변수를 받지 않으며, 현재 인스턴스의 해시 코드를 나타내는 int(32비트 부호 있는 정수) 값을 반환합니다.
예제 1
다음은 Int16.GetHashCode() 메서드를 구현한 첫 번째 예제입니다.
using System;
public class Demo {
public static void Main(){
short val1 = 20;
short val2 = 25;
Console.WriteLine("Value1 = "+val1);
Console.WriteLine("Value2 = "+val2);
Console.WriteLine("HashCode for value1 = "+val1.GetHashCode());
Console.WriteLine("HashCode for value2 = "+val2.GetHashCode());
Console.WriteLine("Are they equal? = "+(val1.Equals(val2)));
}
}실행 결과
위 프로그램을 실행하면 다음과 같은 출력 결과를 확인할 수 있습니다.
Value1 = 20 Value2 = 25 HashCode for value1 = 1310740 HashCode for value2 = 1638425 Are they equal? = False
실행 결과에서 볼 수 있듯이, 서로 다른 두 short 값인 20과 25는 각각 고유한 해시 코드를 가지며, Equals() 메서드로 비교했을 때 두 값은 같지 않음(False)이 확인됩니다.
예제 2
이번에는 0과 Int16.MaxValue(32767)처럼 극단적인 값을 사용하여 Int16.GetHashCode() 메서드를 구현해 보겠습니다.
using System;
public class Demo {
public static void Main(){
short val1 = 0;
short val2 = Int16.MaxValue;
Console.WriteLine("Value1 = "+val1);
Console.WriteLine("Value2 = "+val2);
Console.WriteLine("HashCode for value1 = "+val1.GetHashCode());
Console.WriteLine("HashCode for value2 = "+val2.GetHashCode());
Console.WriteLine("Are they equal? = "+(val1.Equals(val2)));
}
}실행 결과
위 예제의 출력 결과는 다음과 같습니다.
Value1 = 0 Value2 = 32767 HashCode for value1 = 0 HashCode for value2 = 2147450879 Are they equal? = False
값이 0일 경우 해시 코드도 0이 반환되며, 최댓값인 32767(Int16.MaxValue)의 경우에는 2147450879라는 해시 코드가 반환되는 것을 확인할 수 있습니다. 이처럼 GetHashCode() 메서드는 인스턴스의 값에 따라 결정론적으로(deterministically) 고유한 해시 코드를 생성합니다.
정리
Int16.GetHashCode() 메서드는 short 형식 값의 해시 코드를 반환하며, 반환 타입은 int입니다. 동일한 값은 항상 동일한 해시 코드를 가지므로, Dictionary나 HashSet 같은 해시 기반 자료구조에서 안정적으로 사용할 수 있습니다.