C#의 SByte.GetHashCode() 메서드는 현재 sbyte 인스턴스에 대한 해시 코드(hash code)를 반환합니다. 해시 코드는 해시 테이블, 딕셔너리 등 해시 기반 컬렉션에서 객체를 빠르게 검색하고 비교할 때 활용되는 정수 값입니다.
문법
메서드의 기본 문법은 다음과 같습니다.
public override int GetHashCode ();
예제 1
두 개의 sbyte 변수를 선언한 뒤, 각 값의 해시 코드를 출력해 보겠습니다.
using System;
public class Demo {
public static void Main() {
sbyte s1 = 50;
sbyte s2 = 75;
Console.WriteLine("S1의 값 = "+s1);
Console.WriteLine("S2의 값 = "+s2);
Console.WriteLine("s1과 s2가 같은가? = "+s1.Equals(s2));
Console.WriteLine("s1의 해시 코드 = "+s1.GetHashCode());
Console.WriteLine("s2의 해시 코드 = "+s2.GetHashCode());
}
}출력 결과
S1의 값 = 50 S2의 값 = 75 s1과 s2가 같은가? = False s1의 해시 코드 = 50 s2의 해시 코드 = 75
출력 결과에서 알 수 있듯이, sbyte 값의 해시 코드는 대개 해당 숫자 값 그대로 반환됩니다. 또한 s1(50)과 s2(75)는 서로 다른 값이므로 Equals() 메서드의 결과가 False로 나타납니다.
예제 2
이번에는 sbyte 값과 object 타입으로 박싱(boxing)된 값을 비교하고, 두 값의 해시 코드를 확인해 보겠습니다.
using System;
public class Demo {
public static void Main() {
sbyte s1 = 55;
object s2 = (sbyte)55;
Console.WriteLine("S1의 값 = "+s1);
Console.WriteLine("S2의 값 = "+s2);
int res = s1.CompareTo(s2);
if (res > 0)
Console.WriteLine("s1 > s2");
else if (res < 0)
Console.WriteLine("s1 < s2");
else
Console.WriteLine("s1 = s2");
Console.WriteLine("s1의 해시 코드 = "+s1.GetHashCode());
Console.WriteLine("s2의 해시 코드 = "+((sbyte)s2).GetHashCode());
}
}출력 결과
S1의 값 = 55 S2의 값 = 55 s1 = s2 s1의 해시 코드 = 55 s2의 해시 코드 = 55
s1과 s2는 타입은 다르지만(sbyte vs object) 담고 있는 값이 모두 55이므로, CompareTo() 메서드는 0을 반환하여 "s1 = s2"가 출력됩니다. 이처럼 GetHashCode() 메서드는 값이 같은 인스턴스에 대해 동일한 해시 코드를 반환하며, Equals() 및 CompareTo() 메서드와 함께 사용하면 값의 동등성을 효율적으로 판단할 수 있습니다.