javascript 배열의 얕은복사, 깊은복사
웹 개발자라면 알고있어야하는 상식
1. 배열의 얕은복사, 깊은복사 용어 이해
얕은 복사는 새로운 객체만 생성하고, 내부에 들어있는 객체들은 기존 참조를 그대로 복사한다.
즉, 바깥 구조만 새로 만들고 내부 객체는 공유한다.
깊은 복사는 중첩된 객체와 배열까지 모두 새로 생성한다. 즉, 원본과 완전히 독립적인 복사본을 만든다.
2. 얕은 복사의 문제점은 무엇일까?
내부 객체를 공유하기때문에 객체를 수정하게되면 다른 복사본도 함께 변경이 된다.
3. 깊은 복사는 javascript에서 어떻게하지?
대표적으로 JSON , 아니면 재귀함수를 직접 구현하는 방법도 존재한다.
그러나 메모리상 복잡한 구조 전체를 복사하는게 쉽지 않다.
4. 깊은 복사를 그나마 쉽게해주는 기술
대표적으로 SON 직렬화/역직렬화를 활용한다.
예를들어 JSON.stringify()로 객체를 문자열로 직렬화한 뒤, JSON.parse()로 다시 객체로 변환하면 내부 객체까지 새로 생성되어 깊은 복사가 가능하다.
ps. 찾아보니 Data, Map같은 값은 복사 안된다라는 한계점이 있어 structuredClone() 같은 내장 함수를 활용하기도 한다고 하네요…
5. 프론트엔드(브라우저)와 서버간의 통신에서 json이 사용되고 직렬화와 역렬화가 사용되는 이유
서버와 브라우저는 객체를 그대로 전송할 수 없다. 이때 객체를 문자열(JSON) 형태로 변환하여 전달하고 받은 문자열을 다시 객체로 변환하는 과정을 거쳐 통신한다. 이때 직렬화와 역렬화가 사용된다.
6. 자바스크립트에서 직렬화/역렬화 기술이 하나뿐인가? 다른 것이 있나?
JSON.stringify(),** JSON.parse(), structuredClone() 등이 존재한다. 이외에도 Buffer, FormData등 다른 전송방식도 존재한다. (상황에 따라 다른 방식을 채택한다고 한다)
27
규나
댓글
댓글을 작성하려면 이 필요합니다.