카테고리 없음
javascript 데이터타입, 얕은복사, 깊은복사, 값의 없음.
노강표
2022. 3. 23. 18:35
1. 데이터 타입의 종류
1-1) 원시형 데이터
- NUmber
- String
- Boolean
- null
- undefined
- Symbol
1-2) 참조형 데이터
- object
- Array
- Date
- RegExp(정규표현식)
- Map, WeakMap(Map에서 키값으로 object만 사용 가능.)
- Set, WeakSet(Set에서 value값을 object만 사용 가능.)
- 불변성
2. 메모리와 데이터.
- 메모리는 비트로 구성되어있고, 고유한 주소 값을 통해 비트의 위치를 알 수 있다.
- 메모리 용량이 과거에 비해 월등히 커진 현시점에서 자바스크립트는 이런 메모리 관리의 압박에 있어 자유롭다.
- 자바스크립트에서의 숫자는 정수형, 부동 소 수형을 구분하지 않고 모두 1바이트, 한 글자 기준 한글 2바이트, 영어 1바이트로 표현하다.
- 메모리에서의 해당 바이트의 위치는 바이트를 이루는 비트 중, 맨 앞의 비트를 가리키는 주소 값으로 파악할 수 있다.
3. 식별자와 변수.
- 식별자는 변수명을 의미.
- 변수는 데이터가 담길 공간을 의미.
4. 변수에 데이터 할당.
4-1) 원시형 타입의 데이터
- 변수에 데이터가 직접 할당되는 방식이 아닌, 임의의 메모리 공간에 데이터를 담은 메모리를 생성하고, 그 메모리의 주소 값을 변수에 할당한다. 참조형 타입의 데이터
- 참조형 데이터 중 객체를 예로 들면, 변수 외에 객체의 프로퍼티를 관리하는 또 다른 메모리 영역(프로퍼티 묶음 변수라 하자.)이 할당되며, 프로퍼티 묶음 변수에 각 프로퍼티에 할당된 데이터 주소 값들을 담고 있다. 그래서 최종적으로 객체의 변수엔, 이 프로퍼티 묶음 변수의 주소 값이 할당된다.
5. 원시형 데이터, 참조형 데이터 간 값을 복사했을 때의 차이
5-1) 원시형 데이터를 담은 변수를 복사할 경우.
- 해당 변수에 들어있는 데이터의 주소 값이 복사된다.
5-2) 참조형 데이터를 담은 변수를 복사할 경우.
- 마찬가지로 객체를 예를 들면 해당 변수엔 프로퍼티 묶음 변수의 주소 값이 들어있기때문에, 이 주소값이 복사된다.
6. 객체의 불변성을 유지해야 하는 이유
- 참조형 데이터를 담고 있는 변수는 값을 복사하더라도 데이터의 주소 값이 복사되는것이아닌, 데이터들을 담고있는 또다른 영역의 주소값이 복사되기 때문에, 결론적으론 가리키고 있는 데이터가 동일하다. 따라서 데이터를 조작하는 데 있어 원본을 훼손하여 알 수 없는 에러를 발생시킬 수 있기 때문에 복사본을 만드는 행위에 있어 일반적인 복사 방법을 사용하면 안 된다.
7. 얕은 복사 vs 깊은 복사
7-1) 얕은 복사
- 참조형 데이터를 복사하는 방법이다. 얕은 복사
- 뎁스가 1인 복사를 의미한다. 여기서 뎁스란 다음을 의미한다.
// 뎁스가 1인 경우 const obj1 = { a: 1, b:2, c:"hi" } // 뎁스가 2인 경우 const obj2 = { a:1, b:{B :1}, c:"h1" }; // 뎁스가 3인 경우 const obj2 = { a:1, b:{bb : {bbb :1}}, c:"h1" };
- 자바스크립트에서의 얕은 복사로는 전개 연산자, 배열의 내장 함수를 통해 만든 새로운 배 열등이 이에 해당한다.
7-2) 깊은 복사
- 뎁스가 2 이상인 경우를 얕은 복사로 복사를 진행할 경우, 데이터의 주소 값이아닌, 데이터를 담고있는 또다른 영역의 주소값이 복사되기 때문에, 마찬가지로 원본과 동일한 데이터를 가리키게 된다. 이는 완벽한 복사로 보기엔 어렵다.
- 깊은 복사의 방법으로는 재귀 함수를 통한 복사, JSON문법을 통한 복사(단 이 경우엔 함수나,__proto__,getter/setter등과 같은 JSON으로 표현이 불가능한 프로퍼티는 무시)가 있다.
undefined vs null
- 자바스크립트에서 "없음"을 표현하는 두 가지 방식이다.
- undefined는 자바스크립트 엔진에 의해서도 할당될 수 있다.
- null은 사용자에 의해서만 할당될 수 있다.
- 따라서 값이 존재하지 않다를 명시할 시엔 null을 통해 표현하는 것이 추가적인 오류를 막을 수 있다.
참고자료
http://www.yes24.com/Product/Goods/78586788
코어 자바스크립트 - YES24
자바스크립트의 근간을 이루는 핵심 이론들을 정확하게 이해하는 것을 목표로 합니다최근 웹 개발 진영은 빠르게 발전하고 있으며, 그 중심에는 자바스크립트가 있다고 해도 결코 과언이 아니
www.yes24.com