C#의 Single.GetHashCode() 메서드는 현재 인스턴스의 해시 코드(hash code)를 반환하는 데 사용됩니다. 해시 코드는 객체를 고유하게 식별하는 정수 값으로, 해시 테이블이나 딕셔너리(Dictionary)처럼 해시 기반 컬렉션에서 데이터를 빠르게 조회할 때 활용됩니다.
구문
GetHashCode() 메서드의 기본 구문은 다음과 같습니다.
public override int GetHashCode();
이 메서드는 매개변수를 받지 않으며, 해당 float(Single) 값에 대응하는 int 타입의 해시 코드를 반환합니다.
예제 1
아래 예제에서는 두 개의 float 값에 대해 GetHashCode() 메서드를 호출하여 각각의 해시 코드를 출력하고, Equals() 메서드로 두 값이 서로 같은지 비교해 봅니다.
using System;
public class Demo {
public static void Main() {
float f1 = 40.2f;
object f2 = 50.5f;
Console.WriteLine("Value1 = "+f1);
Console.WriteLine("HashCode of Value1 = "+f1.GetHashCode());
Console.WriteLine("Value2 = "+f2);
Console.WriteLine("HashCode of Value2 = "+f2.GetHashCode());
Console.WriteLine("Are both the values equal? = "+f1.Equals(f2));
}
}실행 결과
위 코드를 실행하면 다음과 같은 출력 결과가 나타납니다.
Value1 = 40.2 HashCode of Value1 = 1109445837 Value2 = 50.5 HashCode of Value2 = 1112145920 Are both the values equal? = False
출력 결과에서 볼 수 있듯이, 값이 서로 다른 두 float 변수는 서로 다른 해시 코드를 가집니다. 또한 f1(40.2)과 f2(50.5)는 값이 다르므로 Equals() 비교 결과는 False가 됩니다.
예제 2
이번에는 두 float 변수의 해시 코드를 각각 구해 출력하고, CompareTo() 메서드를 이용해 두 값의 크기를 비교하는 예제를 살펴보겠습니다.
using System;
public class Demo {
public static void Main() {
float f1 = 15.3f;
float f2 = 35.9f;
Console.WriteLine("Value1 = "+f1);
Console.WriteLine("Hashcode for Value1 = "+f1.GetHashCode());
Console.WriteLine("Value2 = "+f2);
Console.WriteLine("Hashcode for Value2 = "+f2.GetHashCode());
Console.WriteLine("Is f1 and f2 equal? = "+f1.CompareTo(f2));
}
}실행 결과
위 프로그램을 실행하면 아래와 같은 결과가 출력됩니다.
Value1 = 15.3 Hashcode for Value1 = 1098173645 Value2 = 35.9 Hashcode for Value2 = 1108318618 Is f1 and f2 equal? = -1
CompareTo() 메서드는 첫 번째 값이 두 번째 값보다 작으면 음수(-1), 크면 양수(1), 같으면 0을 반환합니다. 따라서 f1(15.3)이 f2(35.9)보다 작기 때문에 결과값으로 -1이 출력된 것을 확인할 수 있습니다.