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
요점은