Core Javascript #1 데이터타입

Jinmin Kim·2020년 10월 19일
0

1) 데이터 타입의 종류
기본형 - 숫자, 문자열, 불리언, null, undefined, Symbol
참조형 - 객체, 배열, 함수, 날짜, 정규표현식, Map, Set

변수 - 변할수있는 데이터
식별자 - 데이터를 식별하는 이름(변수명)

2) 데이터 할당

데이터는 변수영역과 데이터영역으로 나뉘어진다.

var a; //1
a = 'abc';//2

위와 같은 코드에서 내부로 들어가보면
1번에서 변수영역의 주소에 공간을 확보하고 식별자를 a로 놓으며
2번에서 데이터 영역에 공간을 확보한뒤에 'abc'를 그 공간에 넣어준다
그리고 그 변수영역에 'abc'라는 공간을 가리키는 주소값을 입력시켜준다.
별도의 공간에 처리하는 이유는 효율적으로 데이터의 변환을 처리하기 위함이다.

3) 기본형데이터 참조형 데이터

3-1. 불변값
불변값의 성질 - 값에 대한 변경은 새로 만드는 동작을 통해서만 이루어진다.(한번 만든값은 가비지 컬렉팅을 하지않는한 영원히 변하지 않는다)

3-2. 가변값
가변값 - 데이터 영역에 저장된 값은 모두 불변값으로 그대로지만,
변수에는 다른값을 언제든지 대입할수있다

참조 카운트 - 어떤 데이터에 대해 자신의 주소를 참조하는 변수의 개수
참조카운트가 0인 메모리 주소는 가비지 컬렉터의 수거 대상이된다.

3.3 변수 복사 비교

var a = 10;
var b = a;

var obj1 = { c : 10, d : 'ddd'};
var obj2 = obj1;

기본형이든 참조형이든 어떤 데이터 타입이든 변수에 할당하기위해서는 주솟값을 복사해야하기 때문에, 엄밀히 따지만 모든 데이터 타입은 참조형 데이터일수밖에없다. 기본형은 주솟값 복사가 한번이고, 참조형은 한단계를 더 거친다는것이 다른점.

var a = 10;
var b = a;

var obj1 = { c : 10, d : 'ddd'};
var obj2 = obj1;

b = 15;
obj2 = {c : 20, d: 'ddd'};

이렇게하면 메모리의 데이터 영역의 새로운 공간에 새 객체가 저장되고 주소를 변수 영역의 obj2 위치에 저장한다. 이것은 객체에 대한 변경임에도 값이 바뀌는 현상, 참조데이터가 가변값이라고 설명하는것은 데이터 자체의 값을 변경할때가 아니라 내부의 프로퍼티를 변경할때만 성립한다.

4) 불변 객체
불변객체 (Immutable Object) 는 생성 후 그 상태를 바꿀 수 없는 객체를 말한다.
-> 사용되는 Immutable js, Baobab.js 라이브러리

4-1) 얕은 복사 깊은 복사
얕은 복사는 참조하는 주소값이 같아 져서 복사된것이나 복사 대상의 값이 바뀌면 같이 값이 바뀌게된다. 또한 바로 아래의 객체에 직접 속한 프로퍼티에 대해서는 데이터가 복사가되지만 한단계 더 들어간 복사는 불가능하다. 그래서 깊은 복사를 사용한다.
깊은 복사를 하는 방법은
1. 범용 함수 사용

var copyObjectDeep = function(target){
  var result = {};
  if(typeof target === 'object' && target !== null){
    for(var prop in target){
      result[porp] = copyObjectDeep(target[prop]);
    }
  }else{
     result = target;
  }
  return result;
}
  1. JSON.parse(JSON.stringify(object)) 사용
    JSON 문법으로 표현된 문자열로 전환했다가 다시 JSON 객체로 바꾸는 작업. __proto__나 getter/setter 같은 JSON으로 변경이 불가능한것들은 무시한다

* null 값의 typeof는 object라고 나타난다.

!!이내용은 코어 자바스크립트(정재남지음) 책을보고 정리한 내용입니다.

profile
Let's do it developer

0개의 댓글