얕은복사, 깊은복사에 대해 설명해주세요.

최관수·2023년 9월 13일
0

기술면접

목록 보기
26/58

내용 정리

  • 참조 타입과 원시 타입의 근본적인 차이 중 하나는 참조 타입은 말 그대로 Pass by Reference, 참조에 의해 복사된다는 점입니다. 그래서 우리가 변수를 복사하듯 새로운 변수에 기존 변수를 복사하면 동일한 메모리 주소를 바라보게 되고, 복사한 변수의 값을 변경하면 두 변수 모두 값이 변하게 됩니다.
  • 만약에 아예 독립적인 객체로 복사하고 싶다면 빈 객체를 하나 선언하고 대상이 되는 객체의 프로퍼티 전부를 반복문을 통해 복사해서 넣거나 Object.assign() 메소드를 활용해서 복사를 하면 됩니다. 다만 객체 안쪽에 프로퍼티가 다시 객체인 경우, 즉 중첩객체인 경우에는 또 다시 참조값이 복사되기 때문에 완전히 독립적인 복사가 불가능합니다. 그래서 이를 얕은 복사(Shallow copy)라고 부르고, 별도의 깊은 복사(Deep copy)가 존재합니다.
  • 중첩 객체까지 복사가 가능한 깊은 복사(Deep copy)는 표준 알고리즘이 있긴 하지만 주로 전개 연산자나 lodash 라이브러리의 내장 함수인 _.cloneDeep() 함수를 통해서 구현하는 편입니다.

꼬리 질문

  • 얕은 복사나 깊은 복사를 작업하시면서 한 예시를 들어주세요
  • 깊은 복사할 때 어떤 방식으로 작업을 하셨나요?
  • 얕은 복사와 깊은 복사를 나눠서 사용하는 이유가 뭔가요?
  • 리액트에서 불변성을 지켜가면서 상태 변경을 하는 이유에 대해 설명해주세요

참고자료

profile
평소엔 책과 영화와 음악을 좋아합니다. 보편적이고 보통사람들을 위한 서비스 개발을 꿈꾸고 있습니다.

0개의 댓글