책 정리/Effective C#
item 10, GetHashCode()의 함정을 유의하라
최익필
2010. 6. 27. 19:52
Purpose-built post
Effective C# 을 읽고, 공부하려고 정리 한다.
Content
관련 링크
어떤 함정이 있는 것일까?
Collection 의 Key 로 GetHashCode() 값을 사용하게 될 경우, 해쉬값이 변경 안될 것이라는 생각(이건 함정 보다는 collection 사용법에 가깝다.)이 함정이다. 똑같은 예로, c++ std::map 을 사용 할 때, map의 Key는 const 이므로 변경이 안되게 막아 둔것을 알 수 있을 것이다.
함정에 빠지면 어떻게 되는가?
만약 Collection의 Key로 GetHashCode()를 사용 하고, Collection 에 밀어 넣은 후, GetHashCdoe()가 변경 되게 된다면, Collection에 밀어 넣은 객체를 다시는 찾을 수 없게 될 것이다.
예제코드를 줄 수 있는가?
a = 3; 과 a = 4; 에서 결과가 바뀌는 것을 볼 수 있을 것이다. 이것이 함정이다.
Digression
- GetHashCode()를 재정의 하면 되긴 하는데, 재정의 할 때, 몇가지 규칙을 지켜야 한다. 이것 또한 귀찮다. 성능상 해쉬아니면 답이 안나올 때, 그때 다시 봐도 늦지 않을 것이다. 이번 항목에선 단지 이러한 함정에 주의 하자는 정도로 넘어가는게 좋겠다.