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

C# Int32.GetHashCode() 메서드 완벽 정리 - 예제 코드와 실행 결과

C#에서 Int32.GetHashCode() 메서드는 현재 정수 인스턴스의 해시 코드(hash code)를 반환하는 메서드입니다. 해시 코드는 해시 테이블이나 딕셔너리(Dictionary) 같은 해시 기반 컬렉션에서 객체를 빠르게 조회할 때 활용되는 고유한 정수 값입니다.

문법(Syntax)

Int32.GetHashCode() 메서드의 기본 문법은 다음과 같습니다.

public override int GetHashCode ();

예제 1

첫 번째 예제를 통해 Int32.GetHashCode() 메서드가 어떻게 동작하는지 살펴보겠습니다. 이 예제에서는 int 자료형이 표현할 수 있는 최솟값인 Int32.MinValue와 일반적인 값 300을 사용합니다.

using System;
public class Demo {
    public static void Main(){
        int val1 = Int32.MinValue;
        int val2 = 300;
        Console.WriteLine("Value1 = "+val1);
        Console.WriteLine("Value2 = "+val2);
        Console.WriteLine("Are they equal? = "+val1.Equals(val2));
        Console.WriteLine("HashCode for Value1 = "+val1.GetHashCode());
        Console.WriteLine("HashCode for Value2 = "+val2.GetHashCode());
    }
}

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

Value1 = -2147483648
Value2 = 300
Are they equal? = False
HashCode for Value1 = -2147483648
HashCode for Value2 = 300

출력 결과에서 확인할 수 있듯이, Int32 타입의 경우 해시 코드가 해당 정수 값 그대로 반환됩니다. 즉, 값이 -2147483648이면 해시 코드도 -2147483648입니다. 또한 두 값이 서로 다르므로 Equals 비교 결과는 False가 나타납니다.

예제 2

이번에는 두 변수가 같은 값을 가질 때의 동작을 확인해 보겠습니다.

using System;
public class Demo {
    public static void Main(){
        int val1 = 50;
        int val2 = 50;
        Console.WriteLine("Value1 = "+val1);
        Console.WriteLine("Value2 = "+val2);
        Console.WriteLine("Are they equal? = "+val1.Equals(val2));
        Console.WriteLine("HashCode for Value1 = "+val1.GetHashCode());
        Console.WriteLine("HashCode for Value2 = "+val2.GetHashCode());
    }
}

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

Value1 = 50
Value2 = 50
Are they equal? = True
HashCode for Value1 = 50
HashCode for Value2 = 50

두 변수가 동일한 값 50을 가지고 있으므로 Equals 비교 결과는 True이며, 두 객체의 해시 코드 역시 모두 50으로 동일하게 반환됩니다.

핵심 포인트 정리

  • Int32.GetHashCode() 메서드는 현재 정수 값에 대한 해시 코드를 반환합니다.
  • C#에서 int(Int32) 타입의 해시 코드는 별도의 변환 없이 정수 값 자체와 동일합니다.
  • 두 값이 같으면(Equals가 True) 반드시 해시 코드도 같아야 한다는 해시 코드의 기본 계약을 이 예제에서 확인할 수 있습니다.