728x90
🌲 데이터 얕은 복사와 깊은 복사 (shallow, deep copy)
🚨 참조형 데이터를 새로운 변수에 할당 시 문제점
const user = {
name : 'kim',
age : 99,
email : 'siot@mail.com'
}
const copyUser = user // 복사
console.log(copyUser === user) // true
user.age = 22
console.log('user', user.age) // user 22
console.log('copyUser', copyUser.age) // copyUser 22
메모리 주소를 참조하기 때문에 value값이 변경되면 주소를 참조한 데이터 모두 변경된다.
🚨 참조형 데이터 복사 방법
- 새로운 메모리 주소로 복사
- 전개연산자로 복사
- 얕은 복사 시 문제점
- 모든 데이터 복사방법 deep copy
✅ 새로운 메모리 주소로 복사
Object.assign({}, 출처객체)
assign메소드에서 대상객체에 빈 객체를 넣어 새로운 메모리 주소로 복사하는 방법
const user = {
name : 'kim',
age : 99,
emails : 'siot@mail.com'
}
const copyUser = Object.assign({}, user)
console.log(copyUser === user) // false
user.age = 22
console.log('user', user.age) // 22
console.log('copyUser', copyUser.age) // 99
✅ 전개연산자를 활용
const user = {
name : 'kim',
age : 99,
emails : 'siot@mail.com'
}
const copyUser = {...user} // 전개 연산자
console.log(copyUser === user) // false
user.age = 22
console.log('user', user) // 22
console.log('copyUser', copyUser) // 33
❎ 참조형 데이터의 얕은 복사 시 문제점
변수 user안에 배열데이터 emails는 복사되지 않는다. 껍데기만 복사되고 내부 내용(가변)은 참조되는 상황 발생
const user = {
name : 'kim',
age : 99,
emails : ['siot@mail.com']
}
const copyUser = {...user}
console.log(copyUser === user) // false
user.age = 22
console.log('user', user)
console.log('copyUser', copyUser)
user.emails.push(('second@mail.com'))
console.log(user.emails === copyUser.emails) // true
console.log('user', user)
console.log('copyUser', copyUser)
✅ 모든 데이터 복사방법 (lodash패키지)
1. lodash 설치
npm i lodash
2. lodash import
import _ from 'lodash' // js파일은 확장자 생략 가능
3. lodash 재귀함수를 이용한 재귀적 값 복사 재귀링크 lodash의 cloneDeep 링크
*재귀 : 하나의 데이터 안에서 반복적으로 실행하며 모든 값을 복제
import _ from 'lodash'
const user = {
name : 'kim',
age : 99,
emails : ['siot@mail.com']
}
const copyUser = _.cloneDeep(user)
console.log(copyUser === user) // false
user.age = 22
console.log('user', user)
console.log('copyUser', copyUser)
user.emails.push(('second@mail.com'))
console.log(user.emails === copyUser.emails) // false
console.log('user', user)
console.log('copyUser', copyUser)
728x90
'FE' 카테고리의 다른 글
js 모듈 import와 export (0) | 2021.11.13 |
---|---|
Lodash Method 로대쉬 패키지와 메소드 / uniqBy unionBy find (0) | 2021.11.13 |
데이터 불변성과 가변성, 원시데이터와 참조형 데이터 (0) | 2021.11.13 |
전개연산자 Spread, 아이템을 전개하는 방법 (0) | 2021.11.13 |
객체 데이터, 배열 데이터의 구조 분해 할당 (0) | 2021.11.12 |