내용 정리 JS - 코어 자바스크립트 01 - 데이터 타입.

이유승·2023년 7월 25일
0

내용 정리

목록 보기
11/31
post-thumbnail

1. JavaScript의 데이터 형식

기본형Primitive

-> 숫자
-> 문자열
-> Boolean
-> null
-> undefined
-> Symbol (New! ES6+)

참조형Reference

-> 객체
-> 함수
-> 배열
-> 정규표현식
-> Set, WeakSet (New! ES6+)
-> Map, WeakMap (New! ES6+)



2. JavaScript의 메모리 구조

스택 메모리와 힙 메모리

스택 메모리 : 변수, 기본형 데이터가 저장되는 정적 할당.
힙 메모리 : 참조형 데이터가 저장되는 동적 할당.

메모리에는 하나의 셀마다 주소가 부여되어있다. 변수가 선언되면, 시스템은 데이터를 저장할 공간을 확보한다.

기본형 데이터의 할당 순서

하나의 셀에 식별자 a가 할당된다.

var a;

'abc'의 값이 하나의 셀에 저장되고, 식별자 a를 찾아 셀의 주소를 연결한다.

a = 'abc';

다른 데이터가 대입되면, 다른 셀에 저장하고, 식별자 a에 연결된 기존 주소를 새 주소로 교체한다.

a = 'abcdef';

참조형 데이터의 할당 순서

기본적으로는 기본형 데이터 할당 순서와 동일하다.

var obj;
obj = {
    a: 1,
    b: 2
};

그런데 하나의 셀에는 하나의 값만이 들어갈 수 있다. 그래서 객체의 경우 내부 프로퍼티가 들어갈 별도의 공간을 할당받아 한 객체의 프로퍼티들이라는 정보를 저장한다. 그리고 프로퍼티의 이름, 값을 각각 하나의 셀에 할당하고 주소를 연결한다.

값이 재할당 되거나 하는 이유로 더 참조하는 곳이 없는 값은? 참조 카운트가 0이 되었으므로 가비지 컬렉터의 수집대상이 되어 메모리에서 사라진다.

가령 개별 프로퍼티 메모리 위치 정보가 들어있는 셀이 사라질 경우, 각각 프로퍼티 데이터가 담긴 메모리들도 사라지게 된다.

하나의 셀에 넣기에는 너무 데이터의 용량이 큰 경우. 각각의 셀에 동일한 값이 들어갈 경우 메모리 사용이 너무 비효율적이 되어버린다. 위와 같이 값을 하나의 셀에 넣고 그 셀의 위치값을 참조받는 것이 더 메모리 낭비를 최소화 하는 방법인 것.

다만 주소를 참조하는 방식이 무조건 옳은 것은 아니다.

값 직접 저장

데이터 할당의 속도가 빠르다, 비교에 필요한 비용이 크다, 메모리 소모가 크다.

주소 저장

데이터 할당의 속도가 느리다, 비교에 비용이 들지 않는다, 메모리 소모가 작다.
비교에 비용이 들지 않는다 = 같은 값은 메모리 상에 단 하나만 존재한다 = 불변성을 지닌다 = 기본형 데이터는 불변값에 해당한다.



3. 변수의 복사

값이 저장된 셀의 주소를 똑같이 참조한다. 이것이 기본형 데이터의 복사.

참조형 데이터의 값이 변화되더라도, 참조하는 객체 대상은 동일하다. 그래서 참조형 데이터를 복사하여 대입한 변수를 이용해서 참조형 내부의 값을 변경시키면, 원본 데이터의 값도 동일하게 바뀐다.



0. 참고자료

정재남 - 코어 자바스크립트.

profile
프론트엔드 개발자를 준비하고 있습니다.

0개의 댓글