Understand the Pitfalls of GetHashCode()이지선pouoq12@gmail.comHOONS 닷넷 C# SysopMicrosoft Visual C# MVP
System.Object다른 모든 타입의 최상위 역할을 하는 기본 클래스
재정의 가능 메서드
Equals
Finalize
GetHashCode
ToStringGetHashCode메서드해시 코드는 같은 테스트 동안 개체를 식별하는데 사용되는 숫자 값

Hoons-GetHashCode()

Editor's Notes

  • #3 Equals - 개체 간을 비교합니다.Finalize - 개체가 자동으로 다시 회수되기 전에 정리 작업을 수행합니다.GetHashCode - 해시 테이블을 사용할 수 있도록 개체의 값에 해당하는 숫자를 생성합니다.ToString - 클래스의 인스턴스를 설명하는, 사람이 인식할 수 있는 텍스트 문자열을 만듭니다.
  • #4 Collection들은 해시 코드를 획득하기 위해서 GetHashCode()메서드를 이용
  • #5 Regerence타입에 대해서는 비효율적이긴 하지만 동작한다. Value타입에 대해서는 제대로 동작하지 않는 경우도 있다. ==> 단, immutable타입에 대해서만 정상적으로 동작한다. 물론 비효율적으로 동작. 해시 기반의 컨테이너들은 검색의 최적화를 위해서 해시 코드를 이용하며 모든 객체는 해시 코드라고 불리는 integer 값을 생성한다. 1. 두 개체가 같다고 비교되면 각 개체에 대한 GetHashCode메서드에서 동일한 값을 반환해야 합니다.그러나 두 개체가 같지 않다고 해서 두 개체에 대해 GetHashCode메서드가 서로 다른 값을 반환해야 하는 것은 아닙니다.2. 개체의 Equals 메서드 반환 값을 결정하는 개체 상태를 수정하지 않으면 해당 개체에 대한 GetHashCode메서드에서 일관성 있게 동일한 해시 코드를 반환해야 합니다.이는 현재 응용 프로그램 실행에 대해서만 적용되며 응용 프로그램을 다시 실행하면 다른 해시 코드가 반환될 수 있습니다.3. 최상의 성능을 얻으려면 해시 함수는 모든 입력에 대해 무작위 분포를 생성해야 합니다.
  • #6 객체를 검색하기 과정에서 해시 코드를 이용하여 저장공간을 찾고 그 공간 내에 존재하는 객체들에 대해서만 검색을 수행한다.1. 두 개체가 같다고 비교되면 각 개체에 대한 GetHashCode메서드에서 동일한 값을 반환해야 합니다.그러나 두 개체가 같지 않다고 해서 두 개체에 대해 GetHashCode메서드가 서로 다른 값을 반환해야 하는 것은 아닙니다.2. 개체의 Equals 메서드 반환 값을 결정하는 개체 상태를 수정하지 않으면 해당 개체에 대한 GetHashCode메서드에서 일관성 있게 동일한 해시 코드를 반환해야 합니다.이는 현재 응용 프로그램 실행에 대해서만 적용되며 응용 프로그램을 다시 실행하면 다른 해시 코드가 반환될 수 있습니다.3. 최상의 성능을 얻으려면 해시 함수는 모든 입력에 대해 무작위 분포를 생성해야 합니다.
  • #7 객체를 검색하기 과정에서 해시 코드를 이용하여 저장공간을 찾고 그 공간 내에 존재하는 객체들에 대해서만 검색을 수행한다.1. 두 개체가 같다고 비교되면 각 개체에 대한 GetHashCode메서드에서 동일한 값을 반환해야 합니다.그러나 두 개체가 같지 않다고 해서 두 개체에 대해 GetHashCode메서드가 서로 다른 값을 반환해야 하는 것은 아닙니다.2. 개체의 Equals 메서드 반환 값을 결정하는 개체 상태를 수정하지 않으면 해당 개체에 대한 GetHashCode메서드에서 일관성 있게 동일한 해시 코드를 반환해야 합니다.이는 현재 응용 프로그램 실행에 대해서만 적용되며 응용 프로그램을 다시 실행하면 다른 해시 코드가 반환될 수 있습니다.3. 최상의 성능을 얻으려면 해시 함수는 모든 입력에 대해 무작위 분포를 생성해야 합니다.