Javascript 데이터 타입

Minho Yoo·2022년 8월 11일
1
post-thumbnail

데이터 타입 (Data Type)

데이터 타입은 프로그래밍 언어에서 사용할 수 있는 데이터 (숫자, 문자열, 불리언 등)의 종류를 말한다.
데이터 타입에는 기본형과 참조형이 나뉘고 각각의 차이점을 알아보도록 하겠다.

Primitive Type (기본형)

값을 그대로 할당한다.

기본형 데이터 타입의 종류

Number
String
Bollean
null
undefined
(ES6) symbol

Number (숫자형)

프로그래밍 언어에서의 숫자는 우리가 일반적으로 알고 있는 숫자와 그 성격이 사실상 동일하다.
우리는 숫자를 이용하여 덧셈(+)/뺄셈(-)/곱셈(*)/나눗셈(/) 등의 연산을 할 수 있다.

String (문자열)

String 타입은 텍슽느 데이터를 나타내는데 사용한다.

Boolean (논리형)

Boolean타입의 값은 논리적 참, 거짓을 나타내는 truefalse 뿐이다.

null

null은 의도적으로 변수에 값이 없다는 것을 명시할 때 사용한다.
Javascript는 대소문자를 구별하므로 null은 Null, NULL 등과 다르다.

undefined

선언 이후 값을 할당하지 않은 변수는 undefined 값을 가진다.
어떤 변수를 만들고 그 값을 정의해주지 않았을때나 존재하지 않는 객체 프로퍼티에 접근할 경우 undefined가 반환된다.

Symbol

심볼은 ES6에서 새롭게 추가된 타입으로 변경 불가능한 원시 타입의 값이다.
심볼은 주로 이름의 충돌 위험이 없는 유일한 객체의 Property Key를 만들기 위해 사용한다.

Reference Type (참조형)

값이 저장된 주소값을 할당한다. (참조)

참조형 데이터 타입의 종류

[Object] Array
Function
RegExp
(ES6) Map
Set
WeakMap
WeakSet

기본형 데이터의 예제

메모리 상에 저장되는 형태를 추상화한다. (실제 메모리 동작의 흐름을 이해할 수 있다.)
변수명/주소의 표와 주소/데이터의 표는 별개의 저장공간이 아니며, 변수명/주소의 표가 313번보다 앞에 있다고 생각하자

var a;
a = 10;
var b = 'abc';
var c = b;
c = 20;

위 코드를 실제 컴퓨터에서는 어떻게 처리 하는지 표로 알아보자

변수명abc
주소@313@314@315

주소...313314315316317...
데이터길없음 => 10'abc''abc' => 20

선언: 공간을 확보하고 해당 공간의 주소를 변수명과 매칭한다.
할당: 해당 변수가 가리키는 주소의 공간에 데이터를 저장한다.

참조형 데이터의 예제

var obj = {};
obj.a = '';
obj.b = '';
obj.a = 1;
obj.b = 'b';

var obj2 = obj;
obj2.a = 10;

console.log(obj2.a); // 10
console.log(obj.a); // 10
// obj === obj2: 서로 동일한 객체의 주소(1011)를 참조한다.
변수명objobj2
주소@413@414

주소...413414...101110121013...
데이터길없음 => @1011@1011{ a: @1012, b: @1013 }값없음 => 1 => 10값없음 => 'b'

위 과정을 데이터 공간에 기본형 데이터가 담길 때까지 반복한다.
즉 참조형 데이터는 기본형 데이터의 집합이다.
참조가 이뤄지는 형식: 따로 저장된 객체의 주소(1011)만 복사한다.

property: 프로퍼티명은 변수와 비슷한 성질
value: 변수에 할당되는 data와 비슷한 성질

Nested Object(중첩된 객체)

Nested Object는 참조형 데이터 안에 또 다시 참조형 데이터가 있는 경우를 말한다.

var ojb3 = {};
obj3.a = '';
obj3.a = [];
obj3.a = [4, 5, 6];

obj3.a = 'new';
// 1326~1328 주소의 데이털르 참조하는 곳이 없어진다. Danling Object가 된다.
변수명obj3
주소@547

주소...547...11841185...132613271328...
데이터값없음 => @1184{ a: @1185 }{ @1326, @1327 => 'new', @1328 }값없음 => 4 => G.C 대상값없음 => 5 => G.C 대상값없음 => 6 => G.C 대상

Daning Object: '정리되지 않은 메모리', '유효하지 않은 메모리 주소'를 말한다.
G.C 과정(Mark and Sweep): 스택의 모든 변수 또는 Reachable 객체를 스캔하면서 각각 어떤 객체를 참조하고 있는지 찾는 과정을 Mark라고 한다.
이 과정에서 Stop the world가 발생한다.
이후 Mark되어 있지 않은 객체들을 합에서 제거하는 과정이 Sweep이다.

profile
Always happy coding 😊

0개의 댓글