전력 제어하기
액티브 바인딩은 비공개 필드를 설정하는 데에도 사용할 수 있어요. 이 경우 바인딩 함수는 "value"라는 이름의 단일 인자를 받아야 해요.
읽기/쓰기 액티브 바인딩을 만드는 패턴은 다음과 같아요.
thing_factory <- R6Class(
"Thing",
private = list(
..a_field = "a value"
),
active = list(
a_field = function(value) {
if(missing(value)) {
private$..a_field
} else {
assert_is_a_string(value) # or another assertion
private$..a_field <- value
}
}
)
)
값은 바인딩을 함수가 아니라 데이터 변수처럼 할당해요.
a_thing <- thing_factory$new()
a_thing$a_field <- "a new value" # not a_thing$a_field("a new value")
이 연습은 강의의 일부입니다
R에서 S3와 R6로 배우는 Object-Oriented Programming
연습 안내
전자레인지 클래스를 일부만 미리 정의해 두었어요.
- 전자레인지 클래스 정의를 확장해서
active리스트 요소를 포함시키세요. - 전력 수준을 제어하는 액티브 바인딩을
active요소에 추가하세요. - 전자레인지 오브젝트를 만들고
a_microwave_oven에 할당하세요. - 전력 수준을 조회하세요.
- 전력 수준을 문자열
"400"으로 설정하려고 시도해 보세요. - 전력 수준을
1600으로 설정하려고 시도하세요. - 전력 수준을
400으로 설정하세요.
실습형 인터랙티브 연습
이 예제를 이 샘플 코드를 완성하여 풀어보세요.
# Add a binding for power rating
microwave_oven_factory <- R6Class(
"MicrowaveOven",
private = list(
..power_rating_watts = 800,
..power_level_watts = 800
),
# Add active list containing an active binding
___ = ___(
___ = ___(___) {
if(missing(___)) {
# Return the private value
___
} else {
# Assert that value is a number
___
# Assert that value is in a closed range from 0 to power rating
___
# Set the private power level to value
___ <- ___
}
}
)
)
# Make a microwave
a_microwave_oven <- ___
# Get the power level
___
# Try to set the power level to "400"
___ <- ___
# Try to set the power level to 1600 watts
___ <- ___
# Set the power level to 400 watts
___ <- ___