-
카테고리
-
세부 분야
프론트엔드
-
해결 여부
미해결
얕은복사와 깊은 복사에 대해서 질문해요
22.04.21 15:15 작성 조회수 185
0
1. 만약 const num= [a: 1, b: 2] 처럼 주어질 때
const cloneNum = num 이와 같이 그냥 할당하는
경우는 num, cloneNum 둘 다 동일한 주소값을
바라보고 있으므로 (얕은 복사가 아닌)참조관계 라고 하나요?
[여태 이런 경우는 얕은 복사로 이해했거든요..
그래서 불변성을 지키기 위해 전개 연산자(...) 같은 걸
사용해서 깊은 복사를 해야 한다고 (다른 곳에서)배웠던 거 같아서요.
그리고 속성이 기본값이 아닌 참조 타입인 경우
1차 깊은 복사만, 내부 속성(2차 깊은 복사)까지 복사되려면
immer같은 라이브러리등을 사용해야 한다고]
2. 얕은복사는 최상위 객체만 기존 객체와의
참조 관계를 끊는 (내부는 아직 기존 객체의 주소값을
바라보는 ) 걸 말하고 깊은 복사는 내부의
속성들(내부 속성이 객체 또는 배열)까지 참조 관계가
끊어진 상태를 말하나요?
3. 그럼 저기 num 배열을
const cloneNum2 = [...num]; 처럼 하면
내부 속성은 객체 또는 배열이 아니니 깊은 복사가
되는 건가요?
4. 추가로 값인 경우 예를 들어서
let str = 'hello';
let cloneStr = str 이렇게 할당하게 되면
기본값은 그냥 깊은 복사가 되는 건가요?
제가 질문을 잘못해서 죄송해요;;
얕은복사, 깊은 복사의 의미가 애매해서
질문했어요 ㅜㅜ
답변을 작성해보세요.
0
조현영
지식공유자2022.04.21
1. 얕은복사가 아니라 참조입니다.
2. 네 맞습니다.
3.num 배열은 자바스크립트에 존재하지않는 문법입니다만...?
4. 원시값은 얕은복사 깊은복사 참조 이런 게 없습니다. 그냥 복사입니다.
hoze12
질문자2022.04.25
네 ~
참조랑 얕은복사을 혼동해서 그랬던 거 같습니다.
사실 인터넷에 뒤져보면 다 제 질문처럼 정리해놓은게
많아서 그렇게 생각했었는데 이번기회에 알게되어
정말 감사드린다는 말밖에 할 수 없군요
제로초님 감사합니다.
답변 1