TIL80-09 면접준비30: 깊은 복사와 얕은 복사의 차이

김태혁·2023년 4월 26일
0

TIL

목록 보기
193/205

깊은 복사와 얕은 복사의 차이

  • 얕은 복사는 원본 개체의 참조값(주솟값)만 복사하는 반면, 깊은 복사는 새 참조값으로 완전히 새로운 개체를 만듭니다.
  • 얕은 복사는 스프레드 연산자 또는 Object.assign() 메서드를 사용하여 수행할 수 있지만 깊은 복사에는 재귀 함수 또는 Lodash와 같은 라이브러리가 필요합니다.

재귀 함수

  • 재귀 함수는 문제를 해결하기 위해 자체 정의 내에서 자신을 호출하는 함수입니다.
  • 함수는 추가 재귀 호출 없이 값을 반환하는 기본 사례에 도달할 때까지 다른 인수로 자신을 계속 호출합니다. 재귀 함수는 일반적으로 원래 문제와 동일한 패턴을 따르는 더 작은 하위 문제로 나눌 수 있는 문제를 해결하는 데 사용됩니다. 그러나 무한 재귀를 방지하기 위해 재귀 함수에 종료 조건이 있는지 확인하는 것이 중요합니다.

React에서 불변성이 지켜져야 하는 이유

  • 원시형데이터 ( 원시형데이터 숫자, 문자, 불린, undefined, null,symbol)
    할당 받은 메모리 주소값과 그 안의 데이터는 변하지 않기 때문에
    불변성이 있다. 여러개의 변수가 같은 값을 선언하더라도 데이터 자체의 주소값이
    변하지 않는다.

  • 참조형데이터 (객체, 배열, 함수)
    할당 받은 메모리 주소값을 그대로 두고, 그 안의 데이터가 변하기 때문에 불변성이 없다.
    불변성을 지킨다의 의미는 메모리 영역에서 값을 변경할 수 없게 한다, 라는 의미다.

  • 왜냐하면, 리액트의 state 변화 감지 기준은 콜 스택의 주소값이기 때문이다.
    리액트는 콜 스택의 주소값만을 비교해 상태 변화를 감지하는데, 이를 얕은 비교라고 한다.
    이것이 리액트의 state를 빠르게 감지할 수 있는 장점이자 불변성을 유지해야 하는 이유이다.

  • 이렇기 때문에 리액트에서의 불변성이 없는 데이터 같은 경우에는 데이터 렌더링이 되지 않는 문제가 발생한다. 그래서 스프레드 문법과 같은 방법을 통해 깊은 복사를 하여 변경된 데이터 값을 그대로 다른 콜스택 주소값에 할당해야한다.

profile
도전을 즐기는 자

0개의 댓글