Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# SByte.GetHashCode() 메서드 완벽 가이드: 문법과 예제

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() 메서드와 함께 사용하면 값의 동등성을 효율적으로 판단할 수 있습니다.