시작하기무료로 시작하기

가장 먼저 할 일

initialize()라는 특별한 public 메서드가 하나 있습니다(미국식 철자에 주의하세요). 이 메서드는 사용자가 직접 호출하지 않습니다. 대신 객체가 생성될 때, 즉 사용자가 new()를 호출할 때 자동으로 실행됩니다.

initialize()는 R6 객체를 만들 때 private 필드의 값을 설정할 수 있게 해줍니다. initialize() 함수의 패턴은 다음과 같습니다.

thing_factory <- R6Class(
  "Thing",
  private = list(
    a_field = "a value",
    another_field = 123
  ),
  public = list(
    initialize = function(a_field, another_field) {
      if(!missing(a_field)) {
        private$a_field <- a_field
      }
      if(!missing(another_field)) {
        private$another_field <- another_field
      }
    }
  )
)

missing()(docs)의 사용에 주목하세요. 이 함수는 함수 호출에서 인수가 전달되지 않았으면 TRUE를 반환합니다.

factory의 new() 메서드로 전달된 인수는 initialize()로 전달됩니다.

a_thing <- thing_factory$new(
  a_field = "a different value", 
  another_field = 456
)

이 연습은 강의의 일부입니다

R에서 S3와 R6로 배우는 Object-Oriented Programming

강의 보기

연습 안내

전자레인지(factory)가 일부만 정의되어 있습니다.

  • initialize()라는 public 메서드를 추가하세요. 객체가 생성될 때 사용자가 power_rating_wattsdoor_is_open 필드를 설정할 수 있어야 합니다.
    • 인수 이름은 power_rating_wattsdoor_is_open이어야 합니다.
    • initialize() 메서드 본문에서는 각 인수에 대해, 해당 인수가 missing()(docs)이 아니면 대응되는 private 필드를 설정하세요.
  • 전력 정격이 650와트이고 문이 열린 전자레인지 객체를 생성하세요.
    • microwave_oven_factorynew() 메서드를 호출하세요.
    • new()power_rating_watts = 650door_is_open = TRUE 인수를 전달하세요.
    • 결과를 a_microwave_oven에 할당하세요.

실습형 인터랙티브 연습

이 예제를 이 샘플 코드를 완성하여 풀어보세요.

# Add an initialize method
microwave_oven_factory <- R6Class(
  "MicrowaveOven",
  private = list(
    power_rating_watts = 800,
    door_is_open = FALSE
  ),
  public = list(
    cook = function(time_seconds) {
      Sys.sleep(time_seconds)
      print("Your food is cooked!")
    },
    open_door = function() {
      private$door_is_open <- TRUE
    },
    close_door = function() {
      private$door_is_open <- FALSE
    },
    # Add initialize() method here
    ___ = ___(___, ___) {
      if(!missing(power_rating_watts)) {
        private$power_rating_watts <- power_rating_watts
      }
      ___
      
      
    }
  )
)

# Make a microwave
a_microwave_oven <- ___
코드 편집 및 실행