1. Learn
  2. /
  3. Courses
  4. /
  5. R에서 S3와 R6로 배우는 Object-Oriented Programming

Connected

Exercise

이것으로 끝입니다(R6 객체의 종료)

R6 클래스가 객체가 생성될 때 사용자 정의 코드를 실행하는 public initialize() 메서드를 정의할 수 있듯이, 객체가 파괴될 때 사용자 정의 코드를 실행하는 public finalize() 메서드도 정의할 수 있어요. finalize()는 인수를 받지 않아야 합니다. 보통 데이터베이스나 파일 연결을 닫거나, 전역 options() (docs)나 그래픽 par() (docs) 파라미터처럼 부작용을 되돌리는 데 사용해요.

코드 템플릿은 다음과 같아요.

thing_factory <- R6Class(
  "Thing",
  public = list(
    initialize = function(x, y, z) {
      # do something
    },
    finalize = function() {
      # undo something
    }
  )
)

finalize() 메서드는 R의 자동 가비지 컬렉터가 객체를 메모리에서 제거할 때 호출됩니다. gc() (docs)를 입력해 가비지 컬렉션을 강제로 실행할 수 있어요.

Instructions 1/2

undefined XP
    1
    2

작업 공간에는 microwave_oven_factory로 정의된 MicrowaveOven 클래스가 미리 준비되어 있어요. 다양한 음식 유형의 조리 시간이 담긴 SQLite 데이터베이스가 작업 디렉터리에 만들어져 있습니다. RSQLite (docs) 패키지는 로드되어 있어요.

  • SmartMicrowaveOven 클래스를 완성하세요.
    • 이 클래스는 microwave_oven_factory를 상속해야 합니다.
    • private 요소에는 처음에 NULL로 설정된 conn 필드가 있어야 합니다.
    • initialize() 메서드는 dbConnect(SQLite(), "cooking-times.sqlite")를 사용해 SQLite 데이터베이스에 연결해야 합니다.
    • 이 연결은 private conn 필드에 저장해야 합니다.
    • finalize() 메서드는 "Disconnecting from the cooking times database."라는 내용을 message() (docs)로 표시한 뒤, dbDisconnect(private$conn)을 사용해 데이터베이스 연결을 해제해야 합니다.
  • SmartMicrowaveOven 객체를 생성해 a_smart_microwave에 할당하세요.
  • get_cooking_time() 메서드를 음식 인수로 "soup"를 전달해 호출하세요.