Skip to content

[토의] 참조값을 복사해 이용하는 경우가 있나요?  #3

@live-small

Description

@live-small

질문

객체의 참조값을 복사해 이용하는 경우가 있나요?

상세내용

객체를 할당할 경우, 그 객체의 주소값을 참조한다.
그렇기에, 원본 또는 사본 중 어느 한쪽에서 객체를 변경하면 서로 영향을 주고 받는다.

참고

let person = { 
   name: 'live-small', 
   age : '24', 
} 

let newPerson = person; 
newPerson.name = "minji"; 
console.log(person.name); // minji 

연관챕터

11장 (p151)

추가공부

객체의 참조값을 복사하게 되면 구조적 부작용이 많다. 그렇다면 객체를 어떻게 복사할 수 있을까?

객체의 복사

  • 얕은 복사는 한 단계 깊이까지만 복사하는 경우를 의미.
    • 구현 : array.slice(obj), { ...obj }, Object.assign({ }, obj)
  • 깊은 복사는 객체에 중첩되어 있는 객체까지 모두 복사함.
    • 구현 : 재귀, JSON.parse & JSON.stringify

JSON.parse & JSON.stringify 동작방식

  1. JSON.stringify : 원시값 혹은 객체를 모두 문자열(원시값)으로 변환
  2. JSON.parse : 문자열을 다시 js 데이터 타입에 맞춰 변환
    핵심 문자열은 원시타입이기에 변경될 수 없다 -> 새로 할당됨
let origin = [ 1, 2, [ 'string', 'json' ]; 
let deepCopy  = JSON.parse(JSON.stringify(origin)); 

ref

  1. 깊은복사
    https://medium.com/watcha/%EA%B9%8A%EC%9D%80-%EB%B3%B5%EC%82%AC%EC%99%80-%EC%96%95%EC%9D%80-%EB%B3%B5%EC%82%AC%EC%97%90-%EB%8C%80%ED%95%9C-%EC%8B%AC%EB%8F%84%EC%9E%88%EB%8A%94-%EC%9D%B4%EC%95%BC%EA%B8%B0-2f7d797e008a

  2. Object.assign
    https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Object/assign

Metadata

Metadata

Assignees

No one assigned

    Labels

    questionFurther information is requested

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions