선생님 shallow / deep copy 에 대한 글을 보다 이해가 어려운(?) 글을 읽게 되었는데요.
.splice(), .push() 와 같은 메소드를 사용하면 얕은 복사가 되므로 ,
1. 중첩 데이터는 복사되지 않는다.
2. 함수는 복사되지 않는다.
변수1 = 복제대상 방식으로 깊은 복사를 시도하면,
배열은 {1: a, 2: b..} 식으로 객체로 변환되서 복제 된다...
는 내용이었습니다.
그래서 개발자도구에서 직접 실험해봤는데요.
배열[]과 함수 프로퍼티를 가지고 있는 인스턴스 new A()를 생성해서,
그 안에 역시 배열과 함수 프로퍼티를 가지고 있는 인스턴스 new B( ) 를
새로운 배열 [] 에 new A() 를 .push() , .splice() 를 사용해서 넣어봤는데,
프로퍼티로 중첩되어 있는 인스턴스 new B() 와 배열[], 함수 모두 제대로 복제되었습니다. (<- console.log() 로 조회함.)
중첩의 중첩, 중첩으로 배열에 인스턴스, 또 객체에 인스턴스의 배열의 인스턴스.. 식으로 중첩을 반복해서 넣은다음 조회해도 성공했습니다.
+ 또 변수에 할당하는 식의 '깊은 복사'를 해도 배열[]형태가 객체{}형태로 변환되는 일은 일어나지 않았습니다.
생각해보면 얕은 복사는 참조를 복사하는 것이고, 이 참조는 원본 데이터를 가리키는 것이므로, 이를 통해 원본의 중첩 데이터라도 조회하는데 아무 문제가 없을 것 같은데 이해가 되지 않습니다.
.splice() 나 .push() 를 사용해 배열[]에 넣어주면,
배열에 들어간 '참조'를 통해서는, 참조가 가리키는 원본데이터에 중첩된 '인스턴스'나 '배열[]', '함수'가 제대로 나오지 않는 것이 맞나요??
제가 잘못생각하고 있는것인지 피드백 부탁드립니다.