본문 바로가기
코틀린

아토믹 코틀린 - 객체 - 프로퍼티

by 밝지 2023. 10. 2.
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
반응형