📝TIL
data class를 사용할 때, 상속을 피해야하는 이유
📌참고자료: kotlin data class 는 상속을 가능하면 쓰지 말자 | 아는 개발자 Tistory
- data class 사용 시, 객체 간 동등성 비교에 사용되는 hashCode, equals 함수 자동 생성됨
- hashCode 함수?
- 생성자의 멤버 변수 값으로 만들어짐
-> 객체 간 비교를 주소 값이 아닌, 객체의 멤버 변수 값으로 함
- 부모 클래스의 변수 포함 X
-> data class 멤버 변수가 아닌 부모 클래스의 변수를 변경했을 때 hashCode 값 변경되지 X
-> 객체 간 동등성 비교에 의도치 않은 결과 나올 수 있음
- 따라서, data class 상속 대신 추상 클래스나 인터페이스를 활용하는 것이 좋다
hashCode, equals 더 알아보기
📌참고자료: 코틀린 data class에서 자동으로 처리하는 equals와 hashCode를 알아보자.
- equals 와 hashCode의 규칙
-> 지키지 않을 경우 HashMap, HashSet등 컬렉션 사용에 문제가 있을 수 있음
- 클래스에 equals를 정의했다면, 반드시 hashCode도 재정의해야
- 두 객체의 equals가 동일하다면, 반드시 hashCode도 동일해야
- 일반적으로 hashCode 함수는 31을 bit 연산하여 정의
- 매번 equals와 hashCode 함수를 규칙에 맞게 정의하기 힘들다
-> 자동으로 생성해주는 kotlin data class를 사용하자!