class Test(){
fun hi(){
println("hi")
}
}
var test: Test? = Test()
fun ifFunc(){
if(test != null){
println(test!!.hi()) // 가변이기 때문에 스마트캐스팅이 불가능
}
}
fun letFunc(){
test?.let{it.hi()}
}
이렇게 가변 변수이지만
public static final void ifFunc() {
if (test != null) {
Test var10000 = test;
Intrinsics.checkNotNull(var10000);
var10000.hi();
Unit var0 = Unit . INSTANCE;
System.out.println(var0);
}
}
public static final void letFunc() {
Test var10000 = test; // 로컬 변수를 하나 만들고 그걸 사용한다
if (var10000 != null) {
Test var0 = var10000;
int var2 = false;
var0.hi();
}
}
로컬변수를 하나 만들고 그것을 사용하기 때문에 스마트캐스팅이 가능하다. 불변 변수라면 불필요한 변수가 만들어지니 if 가 나을수도 있지만 가변은 확실한 장점이 있는 것 같다. 그리고 변수하나 만든다고 성능차이가 심하지 않을것 같아 경우에 따라 코드가 깔끔해지는 쪽으로 작성하면 될 것 같다.
'개발 > kotlin' 카테고리의 다른 글
kotlin 프로퍼티의 getter는 스마트캐스트가 안되고 final 프로퍼티는 되는 이유 (0) | 2023.08.10 |
---|