얕은 복사 / 깊은 복사 그리고 직렬화 / 역직렬화

배열의 얕은복사 , 깊은복사
배열을 얕은복사하게 되면 얕은복사한 변수는 메모리상의 원본을 동일하게 참조하므로 복사한 배열을 수정하면 메모리상의 원본이 변경된다.
깊은복사를 하게 되면 배열의 모든 요소를 새로운 메모리 영역에 복사하므로 복사한 배열을 수정해도 원본에는 변화가 없다.
얕은 복사의 문제점이 뭘까?
원본 데이터가 훼손되고 데이터의 무결성이 보장되지 않는 문제점이 있다.
깊은 복사는 Javascript에서 어떻게하지?
대표적으로 JSON.parse, JSON.stringify를 사용하는 방법이 있다.
JSON.stringify로 객체를 문자열로 바꾸는 과정에서 원본과의 참조가 모두 끊어진다.
이후 JSON.parse를 이용해 문자열을 다시 객체로 변환하면 새로운 메모리 영역에 객체가 만들어지므로 깊은 복사가 된다. 또한 재귀함수를 이용한 방법이 있다.
프론트엔드(브라우저) 와 서버간의 통신에서 JSON이 사용되고 직렬화와 역직렬화가 사용되는 이유?
-
JSON을 쓰는 이유?
클라이언트(브라우저)와 서버 간의 데이터 통신에 가장 많이 사용되는 경량 형식이다.
특정 프로그래밍 언어에 종속되지 않고 자바스크립트, 파이썬, Java 등 다양한 환경에서 해석 가능하다. 사람이 직접 읽고 이해하기 쉬운 텍스트 구조로 되어 있어 가독성이 좋다.
그치만 단점도 있다.
주석 지원이 되지않는다.
데이터가 계층적으로 복잡해지면 중괄호와 대괄호가 많아져 가독성이 떨어진다.
날짜같은 데이터 타입이 존재하지 않아 데이터 처리 시 번거로움이 있다.
대용량 전송에서 바이너리 프로토콜보다 용량이 크고 처리속도가 느릴 수 있다.
> 바이너리 프로토콜은 바이너리(이진) 데이터를 직접 전송하는 방식 -
직렬화를 하는 이유?
객체 형태의 데이터는 네트워크로 전송하거나 파일에 저장할 수 없다. 이를 연속적인 문자열로 변환하여 파일 저장이나 네트워크 통신을 가능하게 한다. -
역직렬화를 하는 이유?
서버로부터 전송받은 연속된 문자열형태의 데이터를 실제 서비스에서 사용할 수 있는 형태로 변경하기 위해 사용한다.
자바스크립트에서 직렬화/역직렬화 기술이 하나뿐인가? 다른것이 있나?
- URLSearchParams를 이용하는 방법
URLSearchParams의 toString메소드를 이용해 문자열로 직렬화하고 URLSearchParams의 생성자를 이용해 객체로 역직렬화한다.


댓글
댓글을 작성하려면 이 필요합니다.