가시성 변경자
Coddy Kotlin 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 57개 중 8번째.
캡슐화는 클래스가 데이터의 사용 방식을 제어하는 것을 의미합니다. 가시성 변경자는 누가 멤버를 볼 수 있는지 결정합니다. private는 클래스 외부의 모든 곳에서 멤버를 숨기므로, 클래스 자체의 메서드만 접근할 수 있습니다.
class Account {
private var balance = 0
fun deposit(amount: Int) {
if (amount > 0) balance += amount
}
fun report() = "balance: $balance"
}main 내부:
val a = Account()
a.deposit(50)
a.deposit(-999)
println(a.report())
// a.balance = 1_000_000 // 오류: 'balance'에 접근할 수 없음: private입니다출력:
balance: 50Kotlin에는 네 가지 한정자가 있습니다. 한정자를 지정하지 않으면 선언은 public이며 어디에서나 볼 수 있습니다:
public // 기본: 모든 곳에서 보임
internal // 같은 모듈(앱 또는 라이브러리)에서 보임
protected // 클래스와 그 하위 클래스에서 보임
private // 클래스 내부에서 보임(또는 최상위 선언의 경우 파일)비공개 헬퍼 함수는 공개 인터페이스를 작게 유지합니다. 호출자는 클래스가 무엇을 하는지는 보지만, 어떻게 하는지는 보지 못합니다:
class Password(private val text: String) {
val isStrong: Boolean
get() = hasDigit() && text.length >= 8
private fun hasDigit() = text.any { it.isDigit() }
}main 내부:
println(Password("secret123").isStrong)
println(Password("short1").isStrong)출력:
true
false생성자 속성에도 한정자를 사용할 수 있습니다. private val은 외부 코드에서 읽을 수 없는 값을 저장합니다. 데이터를 숨기면 클래스가 모든 변경 사항을 확인하고 자체 규칙을 유지할 수 있습니다.
class Locker(private val code: String) {
private val items = mutableListOf<String>()
fun store(item: String, code: String): Boolean {
if (code != this.code) return false
items.add(item)
return true
}
}챌린지
쉬움Locker(private val code: String) 클래스를 완성하세요. items 목록은 private입니다. store(item, code)은 코드가 일치할 때만 항목을 추가하고 추가되었는지를 반환합니다. open(code)은 코드가 일치하면 항목을 , 로 결합한 결과(또는 empty)를 반환하고, 그렇지 않으면 wrong code를 반환합니다.
제공된 코드는 보관함의 코드를 읽은 다음 put <code> <item> 또는 open <code> 명령을 읽습니다. 각 put에 대해 stored 또는 denied를 출력하고, 각 open의 결과를 출력합니다.
코드는 Locker.kt에 작성하세요. Main.kt에는 제공된 입력/출력 코드가 들어 있으며 수정할 수 없습니다.
직접 해보기
fun main() {
// 제공된 입/출력 코드: 그대로 유지하세요
val input = generateSequence(::readLine).toList()
val locker = Locker(input[0])
for (cmd in input.drop(1)) {
val p = cmd.split(" ")
if (p[0] == "put") println(if (locker.store(p[2], p[1])) "stored" else "denied")
else println(locker.open(p[1]))
}
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
객체 지향 프로그래밍의 모든 레슨
직접 연습해 보세요: Kotlin 플레이그라운드