728x90
반응형
- 프로퍼티를 정의하는 목적 = 클래스 안에서의 상태 유지
- var / val 는 객체가 아니라 참조를 제한한다.
- var를 사용하면 참조가 가르키는 대상을 다른 대상으로 다시 엮을 수 있지만, val을 사용하면 엮을 수 없다.
- var 프로퍼티는 재대입이 가능하지만,
- val 프로퍼티는 재대입이 불가능하다.
- 클래스 안에 정의한 var / val 은 클래스의 일부분이 된다. 따라서 점 표기법을 사용해야만 접근 가능하다.
- 멤버함수는 점 표기법을 쓰지 않고(=해당 프로퍼티를 한정하지 않고) 자신이 속한 객체의 프로퍼티에 접근할 수 있다.
clss Cup2 {
var percentFull = 0
val max = 100
fun add(increase: Int): Int {
percentful += increase
if (percentFull > max)
percentFull = max
return percentFull
}
}
fun main() {
val cup = Cup2()
cup.add(50)
println(cup.percentFull)
cup.add(70)
println(cup.percentFull)
}
//출력
50
100
- 변경할 수 없는 최상위 수준이라면 val 프로퍼티를 정의해도 안전하다.
- 하지만, 가변적인(var) 최상위 프로퍼티를 선언하는 것은 안티패턴이다.
- 공유된 가변 상태에 대한 추론을 제대로 하기가 어렵기 때문이다.
- 때문에 가변 상태(var) 클래스 안에 가둬야 한다.
//가변 상태는 클래스에 가둔다.
class House {
var sofa: String = ""
}
fun main() {
val house = House()
house.sofa = "Simple sleeper sofa: $89.00"
println(house.sofa)
house.sofa = "New leather sofa: $3,099.00"
println(house.sofa)
}
//출력
Simple sleeper sofa: $89.00
New leather sofa: $3,099.00
728x90
반응형
'코틀린' 카테고리의 다른 글
아토믹 코틀린 - 예외(Exception) (0) | 2023.10.02 |
---|---|
아토믹 코틀린 - 객체 - 패키지 (0) | 2023.10.02 |
아토믹 코틀린 - 객체 - 가시성 제한하기 (0) | 2023.10.02 |
아토믹 코틀린 - 객체 - 생성자 (0) | 2023.10.02 |
아토믹 코틀린 - 객체 - 클래스, 멤버 함수... (0) | 2023.10.02 |