얕은 복사와 깊은 복사

손성오·2024년 2월 20일

문제발생

배열과 객체에서

let person ={name:"son"}
let newPerson =person
newPerson.name = "Haru"
console.log(person.name) 

위와 같은 코드에서 마지막 콘솔로 찍은 부분은 "Haru" 이다
이는 배열과 객체는 주소값을 복사하기 때문이다

배열에서도

let hobbies =["Soccer","BasketBall"]
let coppiedHobbies = hobbies
coppiedHobbies.push('Game')
console.log(hobbies[2])

hobbies의 2번 요소가 없는것처럼 보이지만 coppiedHobbies를 변경하면 같은 주소값을 가진
원본배열도 변하기에 'Game'이 2번요소로 들어왔다

이와 같은 현상을 해결하기 위한 방법으로는 무엇이 있을까?

배열

배열에서는 slice()와 스프레드를 사용하여 해결할 수 있다

let hobbies =["Soccer","BasketBall"]
let coppiedHobbies = hobbies.slice()
let hobbies =["Soccer","BasketBall"]
let coppiedHobbies = [...hobbies]

객체

객체에서는 Object.assign()와 스프레드를 사용하여 해결할 수 있다

let person ={name:"son"}
let copiedPerson = Object.assign({},person)
let person ={name:"son"}
let copiedPerson = {...person}

0개의 댓글