DB를 사용하면서 Entity를 data class로 표현하는데, id를 자동생성되도록 했더니 두개의 entity 비교에 문제가 생겼다. 내가 원하는건, id를 제외한 내용의 비교. data class가 자동 생성해주는 equals()를 포기하고 내가 재정의 하기엔, 너무 말이 안되는거 같아서 한참을 헤매이다가 알아냄.
data class가 자동생성해주는 equals()는 primary constructor에 정의된 properties만 사용한다.
data class Person(val name: String) {
var age: Int = 0
}
위와 같이 정의되면, age에 상관없이 name만 비교가 된다.
알고보니, Kotlin 공식 문서에 나와있는 내용. 이걸 왜 그리 헤매였던가. 주의할 점은, toString(), hashCode(), copy()에서도 body에 정의된건 다루지 않는다는 것.
자동생성되는 메소드들을 모두 사용하고 싶으면, 이 방법을 쓰지말고 비교 메소드를 따로 만들거나 copy()해서 비교하지 않을 값을 동일하게 바꿔주는 방법이 가능하다. 장단점이 명확하니까, 상황에 따라 본인의 선택이 될듯.