R6 - Modify in place

by Minho Lee — on  , 

cover-image

R6 : Modify-in-place

이전 글에서 R6는 Modify-in-place라는 표현을 사용했다. 실제로 메모리 주소가 어떻게 변하는지 간단하게 살펴보도록 하겠다.

R에서 메모리와 관련된 내용은 Advanced R 을 참고했다.



CASE : R default

iris 데이터를 하나 복사한다. R은 기본적으로 객체를 변화시키지 않기 때문에 object를 변경하는 동작을 취하면 object를 복사한다.

iris_test = iris

pryr패키지의 address 함수를 이용하면 해당 오브젝트의 메모리 주소를 확인할 수 있다

pryr::address(iris_test)
## [1] "0x88c6d08"

이제 iris_test의 값을 변경하고 다시 메모리 주소를 확인해보자

iris_test[2,2] = 0
pryr::address(iris_test)
## [1] "0xadae5a8"

메모리 주소가 변경되었다. 어떠한 오브젝트를 변경하면 실제로는 object를 복사한 후에 값을 변경하는 방식으로 동작한다는 것을 확인할 수 있다.


CASE : R6

이번에는 R6 패키지를 불러오고 Iris 라는 클래스를 생성한다. data라는 field를 만들어서 iris데이터를 입력했다.

library(R6)
Iris = R6Class("Iris",
               public = list(
                 data = iris
               ))

인스턴스를 생성하고 메모리 주소를 확인한다

r6_iris = Iris$new()
pryr::address(r6_iris)
## [1] "0x7bc32b0"

위에서 했던 것과 마찬가지로 값을 변경하고 메모리 주소를 확인한다

r6_iris$data[2,2] = 0
pryr::address(r6_iris)
## [1] "0x7bc32b0"

내부의 값을 변경했지만 메모리 주소는 변경되지 않았다는 것을 볼 수 있다.

Comments