카테고리 없음

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