Menu
Coddy logo textTech

사용자 지정 접근자

Coddy Kotlin 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 57개 중 7번째.

모든 Kotlin 프로퍼티에는 게터가 있고, 모든 var에는 세터도 있습니다. 기본적으로 게터와 세터는 저장된 값을 읽고 씁니다. 사용자 지정 게터는 대신 읽을 때마다 값을 계산합니다:

class Rectangle(var width: Int, var height: Int) {
    val area: Int
        get() = width * height
}

main 내부에서:

val r = Rectangle(3, 4)
println(r.area)
r.width = 10
println(r.area)

출력:

12
40

사용자 지정 세터는 프로퍼티에 값이 할당될 때마다 코드를 실행합니다. 세터 내부에서 value는 할당된 값이고 field는 프로퍼티 뒤에 저장되는 값인 백킹 필드입니다:

class Thermostat {
    var target = 20
        set(value) {
            field = value.coerceIn(10, 30)
        }
}

main 내부에서:

val t = Thermostat()
t.target = 42
println(t.target)
t.target = 18
println(t.target)

출력:

30
18

접근자 내부에서는 속성 이름이 아니라 field를 사용하세요. target의 세터 안에 target = value를 작성하면 세터가 다시 호출되어 무한히 반복됩니다:

var target = 20
    set(value) {
        // target = value        // 이 setter를 다시 호출함: 무한 재귀
        field = value             // 값을 저장함
    }

setter는 변경 사항에 반응하는 곳이기도 합니다. 예를 들어 변경 횟수를 세거나 기록할 수 있습니다:

class Player(name: String) {
    var changes = 0
        private set
    var name = name
        set(value) {
            field = value.trim()
            changes++
        }
}

main 내부에서:

val p = Player("ada")
p.name = "  Ada  "
p.name = "Ada L."
println("${p.name} after ${p.changes} changes")

출력:

Ada L. after 2 changes
challenge icon

챌린지

쉬움

Circle(radius: Double) 클래스를 완성하세요. radius는 음수 값이 0으로 저장되도록 세터가 설정된 var입니다. 사용자 지정 게터를 사용하는 읽기 전용 프로퍼티 diameter와 area(Math.PI를 사용한 π r²)를 추가하고, 면적을 소수점 둘째 자리까지 반올림하여 r=2.0 d=4.0 a=12.57을 반환하는 label도 추가하세요("%.2f".format(area)).

제공된 코드는 줄마다 반지름 하나를 읽고 label을 출력한 다음, 마지막 원의 반지름을 두 배로 만들고 label을 다시 출력하므로 값은 반지름을 따라야 합니다.

코드는 Circle.kt에 작성하세요. Main.kt에는 제공된 입력/출력 코드가 있으며 수정할 수 없습니다.

직접 해보기

fun main() {
    // 제공된 입력/출력 코드: 있는 그대로 유지하세요
    val input = generateSequence(::readLine).toList()
    var last = Circle(0.0)
    for (line in input) {
        last = Circle(line.toDouble())
        println(last.label)
    }
    last.radius *= 2
    println(last.label)
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

객체 지향 프로그래밍의 모든 레슨

직접 연습해 보세요: Kotlin 플레이그라운드