무슨 코드일까??
setDestinationsPlus(
destinations.map((d) => ({
...d,
리덕스를 쓰는데 리덕스로 상태 관리를 안 하고 useState에 다시 넣어줘서 프롭스를 계속 내려주는데 이 한 줄짜리 코드를 몇 시간 동안 못 찾아서 짜증났었음 ㅋㅋㅋㅋ
(하튼 그래서 destinations 어디서 주는지 못찾아서 어디서 주고 있는지 물어봤다가 전개연산자도 모르고 얕은 복사 깊은 복사는 아냐고 창피주더라 )
(ㅈㄴ 억울했음..!)
어제 카카오 시니어 개발자분이 블로그 글을 쓸때 다른 사람 글을 베껴오는게 아니라 내가 이해하고 생각한대로 글을 적는게 중요하다고 했음. 그래서 내맘대로 적어봄
깊은 복사 : 원본의 영향을 주지 않고 값 전체를 복사해옴
얕은 복사 : 복사는 하는데 값이 변경되면 서로 같은 메모리 주소를 바라보고 있기때문에 영향을 서로 받음
이런것들 공부하다 보면 가끔 재밌다. 프로그래밍은 진짜 모든 개념이 다 얽혀있고 변수의 타입에서만 생각나는 개념들은 호이스팅, undefined, const 등등
공부하다가 새롭게 알게 된거라 퍼옴..!
출처 : https://hanamon.kr/javascript-%EB%B3%80%EC%88%98%EC%9D%98-%ED%83%80%EC%9E%85-%EC%9B%90%EC%8B%9C%ED%98%95%EA%B3%BC-%EC%B0%B8%EC%A1%B0%ED%98%95/
여튼 다시 천천히 깊은 복사와 얕은 복사에 대해 알아보자면
출처 : https://pozafly.github.io/javascript/shallo-copy-and-deep-copy/
아 근데 요약이 끝이다. 더 알아야 할게 있나??
깊은 복사는 var a = 10, var b = 10
a === b (true)
b = 20
b 에다가 20을 줘도 a에는 영향이 없다. b에는 다른 메모리주소를 할당해준다.
어제 딥다이브 읽으면서 공부했던 내용이랑 또 연관이 있어서 재밌다.
우선 객체 그 자체의 값을 바꾼 건 아니고 프로퍼티를 바꾼 경우 : 말 그대로 객체가 바라보는 주소 자체를 바꾼 게 아니라 프로퍼티가 바라보고 있는 주소를 바꿨기 때문이다.
그러면 객체를 바꾸려면 ?? 전체 프로퍼티를 바꿔야 하는데 방법이 세가지가 있다고 함
여튼 세가지 방법이 있는데 이렇게 해야 깊은 복사가 일어남
예전에는 이거 몰라서 노래 검색 기능 구현하면서 대소문자를 구분하지 않고 노래 검색을 하고 싶었는데 자꾸 원본 객체에 영향을 줘서 고생했던 적이 있다.
그 당시에는 필요한 속성값들만 따로 빼고 고유한 id를 부여해서 새로운 객체를 만들어버려서 처리했음!
끝.!
const myDeepCopy = structuredClone(myOriginal);
Structured cloning은 JSON.stringify()의 많은 (전부는 아니지만) 단점을 해결합니다. 구조적 복제는 순환되는 데이터 구조를 처리할 수 있고, 내장 데이터 타입을 지원할 수 있으며 일반적으로 더 강력하고 더 빠릅니다.
그러나 여전히 몇 가지 제한 사항이 있습니다.
요약 : 복사본을 생성하기 위한 기본 접근 방식으로 정해놓아도 손색없습니다.
끝! 감사합니다~ 굿~바이`