1. 학습
  2. /
  3. 강의
  4. /
  5. R에서 S3와 R6로 배우는 Object-Oriented Programming

Connected

연습 문제

가장 먼저 할 일

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
)

지침

100 XP

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

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