Core JavaScript - 1. 데이터 타입

배정규·2020년 9월 21일
0

javascript

목록 보기
3/7

자바스크립트의 핵심 개념과 동작 원리를 이해하기 코어 자바스크립트를 읽고 학습한 내용을 정리합니다.

학습 목표

  • 자바스크립트가 데이터를 처리하는 과정을 살펴봄으로써 기본형 타입과 참조형 타입이 서로 다르게 동작하는 이유를 이해하고 이를 적절히 활용할 수 있게 되는 것을 목표로 합니다.

01 데이터 타입의 종류

기본형(원시형, primitive type)

  • 숫자 Number
  • 문자열 String
  • 불리언 Boolean
  • null
  • undefined
  • 심볼 Symbol

참조형(reference type)

  • 객체 Object
  • 배열 Array
  • 함수 Function
  • 날짜 Data
  • 정규표현식 RegExp
  • Map
  • WeakMap
  • Set
  • WeakSet 등

02 식별자와 변수

  • 변수 (variable)는 변할 수 있는 데이터 (숫자, 문자열, 객체, 배열 등)
  • 식별자는 어떤 데이터를 식별하는 데 사용하는 이름, 즉 변수명

> 변수 선언 예제

var a;

예제를 말로 풀어쓰면 "변할 수 있는 데이터를 만든다. 이 데이터의 식별자는 a로 한다." 가 된다.
변할 수 있는 데이터이기 때문에 선언할 때는 undefined 이더라도 나중에 다른 값으로 바꾸면 된다.
결국 변수란 변경 가능한 데이터가 담길 수 있는 공간 또는 그릇 이라고 말할 수 있다.
그리고 이 공간에 숫자를 담았다가 문자열을 담는 등의 다양한 명령을 내릴 수 있다.

03 데이터 할당

> 변수 할당 예제

var a;			// 	변수 a 선언
a = 'abc';		//	변수 a 에 데이터 할당

var a = 'abc';		//	변수 선언과 동시에 데이터 할당 

이어서 할당 과정이다. a 라는 이름을 가진 주소를 검색해서 그곳에 문자열 'abc' 를 할당하면 될 것 같다.
그런데 실제로는 해당 위치에 문자열 'abc' 를 직접 저장하지 않는다. 데이터를 저장하기 위한 별도의 메모리 공간을 다시 확보해서
문자열 'abc' 를 저장하고, 그 주소를 변수 영역에 저장하는 식으로 이루어진다.

다음 순서에 따라 데이터 할당이 진행된다.
1. 변수 영역에서 빈 공간을 확보
2. 확보한 공간의 식별자를 a 로 지정
3. 데이터 영역의 빈 공간에 문자열 'abc' wjwkd
4. 변수 영역에서 a 라는 식별자를 검색
5. 앞서 저장한 문자열의 주소를 변수 영역 공간에 대입

변수 영역에 값을 직접 대입하지 않고 굳이 번거롭게 한 단계를 더 거치는 이유는
데이터 변환을 자유롭게 할 수 있게 함과 동시에 메모리를 더욱 효율적으로 관리하기 위함이다.

04 기본형 데이터와 참조형 데이터

변수 variable 와 상수 constant 를 구분하는 성질은 '변경 가능성'이다. 바꿀 수 있으면 변수, 바꿀 수 없으면 상수.
불변값과 상수를 같은 개념으로 오해하기 쉬운데,
변수와 상수를 구부 짓는 변경 가능성의 대상은 변수 영역 메모리이다.
한번 데이터 할당이 이뤄진 변수 공간에 다른 데이터를 재할당할 수 있는지 여부가 관건이다.
반면 불변성 여부를 구분할 때의 변경 가능성의 대상은 데이터 영역 메모리이다.
기본형 데이터인 숫자, 문자열 boolean, null, undefined, Sybol 은 모두 불변값이다.

참조형 데이터를 변수에 할ㄷ랑하는 과정을 확인해 보자

> 참조형 데이터의 할당

var obj1 = {
	a: 1,
  	b: 'bbb'
};

기본형 데이터와 차이는 '객체의 변수(프로퍼티) 영역'이 별도로 존재한다는 점이다.
다음 순서에 따라 데이터 할당이 진행된다.
1. 컴퓨터는 우선 변수 영역의 빈 공간을 확보하고, 그 주소의 이름을 obj1로 지정
2. 임의의 데이터 저장 공간에 데이터를 저장하려고 보니 여러 개의 프로퍼티로 이뤄진 데이터 그룹이기 때문에 이 그룹 내부의 프로퍼티들을 저장하기 위해 별도의 객체 변수 영역을 마련하고 그 영역의 주소를 데이터 영역에 저장한다.
3. 객체 변수 영역에 각각 a, b 라는 프로퍼티 이름을 지정한다.
4. 데이터 영역에서 1을 검색하고 검색 결과가 없으므로 임의의 새로운 데이터 영역에 저장하고 이 주소를 객체 변수 영역에 저장한다. 'bbb'문자열도 마찬가지이다.

데이터 영역에 저장된 값은 모두 불변값이다 그러나 변수에는 다른 값을 얼마든지 대입할 수 있다. 바로 이 부분 때문에 흔히 참조형 데이터는 불변하지 않다(가변값이다)라고 하는 것이다.

> 참조형 데이터의 프로퍼티 재할당

var obj1 = {
	a: 1,
  	b: 'bbb'
};
obj1.a = 2;

이 경우 obj1 의 a 프로퍼티에 숫자 2를 할당하려고 한다.
데이터 영역에서 숫자 2를 검색하고 검색 결과가 없으므로 빈 데이터 영역 공간에 저장하고 이 주소를 식별자가 a 인 객체 변수 영역에 저장한다.
새로운 객체가 만들어진 것이 아니라 기존의 객체 내부의 값만 바뀐 것이다.

profile
Seize the day

0개의 댓글