시작하기무료로 시작하기

클론의 역습 (2)

R6 객체의 하나 이상의 필드에 다른 R6 객체가 들어 있으면, 기본적으로 clone()은 해당 R6 필드를 참조로 복사해요. 그 R6 필드를 값으로 복사하려면 clone() 메서드를 deep = TRUE 인수와 함께 호출해야 해요.

a_deep_copy <- an_r6_object$clone(deep = TRUE)

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

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

강의 보기

연습 안내

전자레인지의 전원 플러그를 설명하는 PowerPlug R6 클래스가 작업 공간에 미리 정의되어 있어요. MicrowaveOven 클래스에는 PowerPlug 객체가 포함되도록 업데이트되었어요.

  • MicrowaveOven 객체를 만들어 a_microwave_oven에 할당하세요.
  • 인수가 없는 clone() 메서드를 사용해 전자레인지를 cloned_microwave_oven 변수로 복사하세요.
  • clone() 메서드에 deep = TRUE를 전달하여 전자레인지를 deep_cloned_microwave_oven 변수로 깊은 복사하세요.
  • a_microwave_ovenpower_plug 필드 중 type 필드를 "British"로 바꾸세요.
  • a_microwave_ovencloned_microwave_ovenpower_plug$type 필드가 동일한지 확인하세요.
  • a_microwave_ovendeep_cloned_microwave_ovenpower_plug$type 필드가 서로 다른지 확인하세요.

실습형 인터랙티브 연습

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

# Create a microwave oven
a_microwave_oven <- microwave_oven_factory$new()

# Look at its power plug
a_microwave_oven$power_plug

# Copy a_microwave_oven using clone(), no args
cloned_microwave_oven <- ___
  
# Copy a_microwave_oven using clone(), deep = TRUE
deep_cloned_microwave_oven <- ___
  
# Change a_microwave_oven's power plug type  
___$___ <- ___
  
# Check a_microwave_oven & cloned_microwave_oven same 
identical(___, ___)

# Check a_microwave_oven & deep_cloned_microwave_oven different 
identical(___, ___)  
코드 편집 및 실행