클론의 역습 (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_oven의power_plug필드 중type필드를"British"로 바꾸세요.a_microwave_oven과cloned_microwave_oven의power_plug$type필드가 동일한지 확인하세요.a_microwave_oven과deep_cloned_microwave_oven의power_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(___, ___)