-
Notifications
You must be signed in to change notification settings - Fork 0
왜 var로 선언된 property는 private set이 안 될까?
이진혁 edited this page Jun 4, 2021
·
7 revisions
코틀린에서는 var로 선언된 property(프로퍼티)에 대해 setter를 막는 private set 기능을 제공하지 않습니다.
스프링 + 코틀린 환경에서 개발하다보면 var로 선언된 프로퍼티의 setter를 막아야 하는 경우가 존재합니다.
하지만 왜 코틀린에서는 프로퍼티의 private set 기능을 제공하지 않을까요?
이에 대한 예제는 JPA를 사용하기 위한 Entity를 구성하는데 있어서 발생합니다.
처음 코틀린으로 엔티티를 작성하면 보통 다음과 같이 작성하게 됩니다.
@Entity
@Table(name = "person")
class Person(
@Column(name = "name")
val name: String,
@Column(name = "age")
val age: Int,
) {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
var id: Long = 0
}근데 이렇게 엔티티로 생성한 Person 객체의 상태가 변경하려면 어떻게 해야 할까요?
name과 age 프로퍼티는 val로 선언했으니 setter 없이 getter만 존재하게 됩니다.
그래서 Person 객체의 상태를 변경할 수가 없습니다.
그렇다고 var로 선언하자니 아무 의미 없는 setter가 생겨 JPA의 규칙에 어긋납니다.