backend/Kotlin

[Kotlin] 읽기 전용 프로퍼티 - val property

버리야 2022. 7. 30. 12:02
반응형

다음 내용은 이펙티브 코틀린 책을 읽고 간단히 정리해본 것입니다.

아이템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로 선언.

반응형