[내일배움캠프] 캠프 16주차 - 3/6(수) #data class 상속

0
post-thumbnail

📝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를 사용하자!
profile
Be able to be vulnerable, in search of truth

0개의 댓글