Notice
Recent Posts
Recent Comments
Link
티라미수 코딩생활
[Kotlin] Data Class 에서의 var & val 본문
이번주, 업무 중 REST API 로 아이템 리스트를 내려받은 뒤, 내려받은 아이템들의 현재가치를 앱에서 계산해서 저장 및 활용해야 하는 상황이 있었다. 이 과정에서 너무나도 당연한데 깜빡 했던 내용이 있어서 남겨두려 한다.
지금 담당하고 있는 프로젝트는 기본적으로 자바로 구현되어 있는데, Kotlin Data Class 를 쓰다보니 Java getter & setter 를 만드는게 싫다는 느낌이 들어 data class 만 Kotlin 으로 만들어 보고자 했다.
알고있는 Kotlin 의 Data Class 의 장점 중 하나는 자동적으로 getter & setter 를 구현해 주는 것.
data class Data(
val name: String,
val job: String,
val point: String
)
간단한 예로, name 과 job 은 Api로 내려받고 point 는 나중에 별도로 set 해서 사용해야지 싶었는데, 프로젝트에서 data.getPoint() 는 나오는데 내가 원했던 data.setPoint()가 안나오는 것이다!
왜그런가 어리둥절 있다가 지인의 조언으로 바이트 코드로 돌려봤더니 field 값이 final 로 되어있다! 그리고 set method 자체가 없다.
public final class Data {
@NotNull
private final String name;
@NotNull
private final String job;
@NotNull
private final String point;
@NotNull
public final String getName() {
return this.name;
}
@NotNull
public final String getJob() {
return this.job;
}
@NotNull
public final String getPoint() {
return this.point;
}
//...//
}
여기서 data class 의 val point 를 var point 바꾸고 다시 바이트 코드를 확인해보니, 이제서야 setPoint 가 구현되어 있고 private String point 로 final 이 빠져 있다!
data class Data(
val name: String,
val job: String,
var point: String
)
public final class Data {
@NotNull
private final String name;
@NotNull
private final String job;
@NotNull
private String point;
@NotNull
public final String getName() {
return this.name;
}
@NotNull
public final String getJob() {
return this.job;
}
@NotNull
public final String getPoint() {
return this.point;
}
public final void setPoint(@NotNull String var1) {
Intrinsics.checkNotNullParameter(var1, "<set-?>");
this.point = var1;
}
//...//
}
간단한 실수지만 이로 인해 요구사항 구현 로직을 불필요하게 변경할 수도 있었다는 생각에 글을 남긴다.
'Programming > Android' 카테고리의 다른 글
[Android] 갑자기 startActivityForResult 가 돌아오지 않는다? (0) | 2022.12.02 |
---|---|
[Android] LiveData 에서 쓰이는 setValue() & postValue() (0) | 2022.12.01 |
[Android] App Test 간단하게 구현해보기! (feat. TDD) (0) | 2022.11.09 |
[Android] App Test 시작해보기 (0) | 2022.11.09 |
[Kotlin] Kotlin Flows in practice 보면서 이해 해보기 (1) (0) | 2022.11.03 |
Comments