Recent Posts
Recent Comments
Link
Today
Total
02-08 14:03
관리 메뉴

채린씨의 티스토리

9. 객체 복사 문제점(!) 본문

자료구조, 알고리즘/JavaScript 기초 문법

9. 객체 복사 문제점(!)

채린씨 2022. 3. 4. 02:50

* 객체(object) 복사 문제점

- object의 값을 복사할 때는 대상 전체가 아니라, object 내 주소 값만 복사됨

- 가리키는 대상 전체를 복사하려면 얕은 복사(Shallow copy) 또는 깊은 복사(Deep copy) 방법 사용

 

* 얕은 복사(Shallow copy) 1

- for문을 이용한 복사 

// 궁금한 점 (궁금증이 해결될 때 까지만 남아있을 글)

for (let key in user) {
  user2[key] = user[key];
}

// 1. 아래 코드처럼 let이 빠지면 안되는 이유가 있을까?
for (key in user) {
  user2[key] = user[key];
}

// 2. 아래 코드는 왜 오류가 날까?
for (key in user) {
  user2.key = user.key;
}

// 일단 여기까지는 name과 age가 출력되니까 괜찮은데..
for (let key in user) {
  console.log(key);
}

// 이걸 돌리면 undefined undefined가 나온단 말이지.. 왜?
for (let key in user) {
  console.log(user.key);
}

 

 

* 얕은 복사(Shallow copy) 2

- Object.assign() 함수를 이용한 복사

 

* 얕은 복사(Shallow copy) 3

- ES6부터 지원하는 전개 연산자(Spread Operator)를 이용한 복사

- 신기해라.. 생전 처음 보는 연산자..

 

* 얕은 복사의 구조

 

* 얕은 복사의 문제점

- 객체 내 또 다른 객체가 있다면 그 또 다른 객체의 주소 값이 그대로 복사됨

- 객체 속에 객체 속에 객체를 더해서..

 


* 깊은 복사(Deep copy) 1

- 재귀 함수를 이용한 복사

 

* 깊은 복사(Deep copy) 2

- JSON 객체를 이용한 복사

- stringify는 객체를 문자열로 변환하는데, 이때 원본 객체와의 참조가 끊김

- 즉, 원본 객체와의 참조를 끊고, 이걸 복사!

 

* 깊은 복사의 구조

 

'자료구조, 알고리즘 > JavaScript 기초 문법' 카테고리의 다른 글

11. 산술대입 연산자  (0) 2022.03.04
10. 형 변환  (0) 2022.03.04
8. 객체타입  (0) 2022.03.04
7. 자료형  (0) 2022.03.03
6. 변수와 상수  (0) 2022.03.03
Comments