data class의 getter override

freddie·2021년 4월 13일
0

Kotlin의 data class에서 getter를 override하고 싶은 일이 있었다.
엔티티를 만드는데, 내부 어트리뷰트가 컬렉션이었고 이걸 외부에서 조회할때 immutableList로 가져가도록 하고싶었다.

하지만 primary constructor에 선언한 프로퍼티의 getter를 override하는것은 불가능했고, 약간의 꼼수를 써서 아래와 같은 모양으로 사용해볼까 했었다.

@Entity
data class Post(
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    var id: Long = 0,
    var title: String,
    
    @OneToMany(cascade = [CascadeType.ALL], mappedBy = "post", orphanRemoval = true, fetch = FetchType.EAGER)
    private var _comments: MutableList<Comment> = mutableListOf()
) {
	val comments : List<Comment>
        get() = _comments.toList()
}

하지만 뭔가 찝찝한 마음이 들어서 찾아보다가 stackoverflow에서 아래 글을 보고 이렇게 사용하는걸 포기했다.

https://stackoverflow.com/questions/38492103/override-getter-for-kotlin-data-class

요점은

  • data class 는 데이터를 변경하기 위한게 아니라 단순히 데이터를 저장하기 위한 것이다.
  • 위와 같은 상황이면 차라리 그냥 class를 사용하고 equals와 hashcode를 구현하라.
  • 임의의 getter를 override하면 hashCode와 equals등을 함께 사용할때 혼동이 올 수 있다.
profile
하루에 하나씩만 배워보자

0개의 댓글