
53
1
장
도메인 모델링
썬이 사용하는 마법 메서드다. 더 많은 정보를 원한다면 파이썬 문서 (
https
://
oreil
.
ly
/
YUzg5
)를 참고하기 바란다.
값 객체의 경우, 모든 값 속성을 사용해 해시를 정의하고 객체를 반드시 불변 객체로 만들어야
한다. 데이터 클래스에 대해
@
frozen
=
True
를 지정하면 공짜로 이런 동작을 얻을 수 있다.
엔티티의 경우, 가장 단순한 선택은 해시를
None
으로 정의하는 것이다. 즉, 이 객체에 대한 해
시를 계산할 수 없고 그에 따라 집합 등에서 사용할 수도 없다는 뜻이다. 특정한 이유로 엔티티
를 집합에 넣거나 딕셔너리의 키로 사용해야 한다면 시간과 무관하게 엔티티의 정체성을 식별
해주는 속성을 사용해 해시를 정의해야 한다(예:
.
reference
). 그리고 어떻게든 이 (정체성
을 식별해주는 ) 속성을 읽기 전용으로 만들어야 한다.
CAUTION_
이 부분은 다루기 어려운 부분이라 간략하게 다루겠다.
__
eq
__
를 변경하지 않았다면
__
hash
__
를 변경해서는 안 된다. 여러분이 무엇을 하고 있는지 확실하지 않다면 관련 문서를 많이 읽어봐
야 한다. 이 책의 기술 리뷰어인 하이넥 슬라왁의 「
Python
Hashes
and
Equality
」(
https
://
oreil
.
ly
/
vxkgX
)부터 읽어보길 권한다.
1.4
모든