본문 바로가기
2학년 2학기/모바일 소프트웨어 - 코틀린

Class(1) - getter, setter

by print_soo 2024. 10. 1.

속성 (getter, setter)

값을 읽어오는 것을 getter, 값을 설정해주는 것을 setter라고 한다.

 

기본적으로 코틀린에서는 프로퍼티를 생성하면 val, var에 따라서 자동으로 getter 또는 setter를 작성해준다. (직접 정의할 수도 있다.)

 

  • val 
    • getter만 생성된다. -> val은 값을 할당할 수 없기 떄문이다.
  • var
    • getter, setter 모두 생성된다.

 

 

 

 

getter 정의해보기

 

class Person() {
    val name: String = "Kim"
        get(){ //get() = field로 생략 가능
            return field
        }

    var age: Int = 24
        get(){ //get() = field로 생략 가능
            return field
        }

    val isAdult: Boolean
        get(){
            return age >= 18
        }
    fun getName() = println("Your name is ${this.name}")
}

fun main() {
    val p = Person()
    println("${p.age}, ${p.isAdult }") //24, true
}

 

 

❓ field는 뭔가?

 

코틀린에서 field는 프로퍼티의 실제 값을 저장하는 백킹 필드(backing field)를 의미한다. 즉, field는 프로퍼티의 값이 저장되는 실제 저장소입니다.

 

 

따라서, getter를 정의할 때는 프로퍼티 이름을 반환하는 것이 아니라 프로퍼티의 값이 저장되어 있는 field를 반환한다.

 

 


 

setter 정의해보기

 



class Person() {
    val name: String = "Kim"
        get(){ //get() = field로 생략 가능
            return field
        }

    var age: Int = 0
        get(){ //get() = field로 생략 가능
            return field
        }
        set(value) {
            if (value >=0){
                field = value
            }
        }

    val isAdult: Boolean
        get(){
            return age >= 18
        }
    fun getName() = println("Your name is ${this.name}")
}

fun main() {
    val p = Person()
    p.age = -1
    println("${p.age}") //0
}

 

❓ value는 뭔가?

 

value는 프로퍼티에 할당하려는 값을 나타낸다. 즉, 프로퍼티의 값을 변경할 때 setter함수가 호출되며, 이때 새로 설정하려는 값이 value이다.