반응형
다음 내용은 이펙티브 코틀린 책을 읽고 간단히 정리해본 것입니다.
아이템1. 가변성을 제한하라. - 읽기 전용 프로퍼티(val) 중에서
읽기 전용 프로퍼티인 val에 대해 정리해보자.
val a = 10
//a = 20 // 재할당 불가.
val list = mutableListOf(1, 2, 3) // 읽기 전용 프로퍼티(val)로 선언되었어도 mutable 객체를 담고 있다면 내부적으로 변환 가능
list.add(4)
print(list)
//list = mutableListOf(5) //val 로 선언되었다면 재할당이 불가능
'프로퍼티를 읽을 수만 있다는 속성(읽기 전용)'과 '값이 변할 수 없는 것(가변성)'을 구분해서 생각해야한다.
var 프로퍼티를 사용하는 val 프로퍼티는 var 프로퍼티가 변할 때 변할 수 있다.
fun main() {
println(fullName)
name = "Maja"
println(fullName)
// -- 결과 --
// Marcin Moskata
// Maja Moskata
}
var name: String = "Marcin"
var surname: String = "Moskata"
val fullName
get() ="$name $surname"
코틀린의 프로퍼티는 기본적으로 캡슐화되어있고, 추가적으로 게터(getter)와 세터(setter)를 가질 수 있다. - 코틀린은 API를 변경하거나 정의할 때 굉장히 유연하다.
var은 getter,setter를 모두 제공하지만, val은 변경불가하기 때문에 getter만 제공한다.
val을 var로 오버라이드 가능.
val은 값이 변경될 수 있기는 하지만 프로퍼티 레퍼런스 자체를 변경할 수 없으므로 동기화 문제를 줄일 수 있다.
그래서 일반적으로 var 보다 val을 많이 사용한다.
val은 읽기 전용 프로퍼티지만, 불변(immutable)은 아니다.
완전히 변경할 필요가 없다면 final로 선언.
반응형
'backend > Kotlin' 카테고리의 다른 글
[Kotlin] 코틀린 MapStruct 적용 및 사용하기 (feat.gradle) (0) | 2022.09.02 |
---|---|
[Kotlin] 가변 컬렉션과 읽기 전용 컬렉션 구분하기 (0) | 2022.08.02 |