일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 코틀린
- 안정성
- mock
- Di
- 자료구조
- MVVM
- 공격적 프로그래밍
- Python
- 안드로이드
- compose
- ViewModel
- Observable
- Android
- Room
- UnitTest
- 단위테스트
- 파이썬
- 제한함수
- 안드로이드 디자인패턴
- 컴포즈
- 유닛테스트
- dagger2
- 깃
- Jetpack
- rxjava
- 디자인패턴
- 테스트의 장점
- git
- Kotlin
- 코딩테스트
Archives
- Today
- Total
세상을 바꾸는 개발자
[Kotlin] Assignment (=) , get() 의 차이 본문
평소에 잘 생각안하고 많이 사용하는 =, get()의 차이는 무엇 일까요 ?
먼저 코드로 알아보도록 하겠습니다!
class Customer {
private var _id = 1
// get() 을 사용
val id: Int
get() = _id
// = 을 사용
val id: Int = _id
}
블로그나 깃허브를 돌아다니다 보면 위와 같이 2가지 방법중 하나를 사용해서 가변성을 제안하는 코드가 있습니다
어떤 차이가 있을까요???
자바 코드로 변경해보면 답이 알 수 있습니다.
먼저 get() 을 사용한 코드를 자바로 변경하면
public final class Customer {
private int _id = 1;
public final int getId() {
return this._id;
}
}
보시면 아시겠지만, 자바로 코드를 변경하면 id의 필드가 만들어지지 않고 getId() 함수를 이용해서 _id 를 리턴하는 것을 볼 수 있습니다.
즉 get()을 사용하면 getter() 함수만 생성되고 필드는 생성되지 않습니다
다음으로는 assignment (=) 을 이용한 코드를 자바 코드로 변경해 보겠습니다.
public final class Customer {
private int _id = 1;
private final int id;
public final int getId() {
return this.id;
}
public Customer() {
this.id = this._id;
}
}
이번에는 assignement (=) 사용하니 id 라는 필드가 생성된 것을 알 수 있습니다
결론
get() 사용: : 필드는 생성하지 않고 getter() 를 이용해 리턴
assignement (=) 사용 : 필드 를 생성하는 동시에 해당 값을 할당하는 것입니다
+ 추가적으로 get() 을 사용하여 변수를 할당하면 코틀린의 장점인 스마트캐스트(smart-cast)가 되지 않습니다.
그 이유는 게터를 활용 하므로 사용하는 시점에 해당 값이 다른 결과가 나올 수 있기 때문입니다.
'안드로이드 > Kotlin' 카테고리의 다른 글
[이펙티브 코틀린] 코틀린의 안정성 - 가변성을 제한하라 (0) | 2023.07.09 |
---|---|
[이펙티브 코틀린] 코틀린의 안정성 - 예외를 활용해 코드에 제한을 걸어라 (0) | 2023.07.08 |
[Android Kotlin] 코틀린 날짜 구하기 (1) | 2021.09.15 |
[Android Kotlin] 둥둥떠다니는 최상위 뷰(FloatingView) 만들기 (4) | 2021.06.18 |
[Android, Room, Coroutinnes, DataBinding, LiveData, ViewModel ] 안드로이드 JetPack과 MVVM 패턴 사용해보기(5 - 4 : 리사이클러뷰를 이용해 리스트 보여주기) (2) | 2021.06.18 |
Comments