데이터타입(DataType)

Min·2020년 12월 30일
0

CoreJavaScript

목록 보기
1/4
post-thumbnail

JavaScript Data Type

JavaScript의 data type에는 Primitive(기본형)Reference(참조형)이 있다.

Javascript Data Types

변수 선언과 데이터 할당

데이터는 성질에 따라 변수 영역(=v)과 데이터 영역(=1)으로 구분되어 저장된다.

var v = 1; // 변수 v에 1을 할당`

위의 코드는 사실

var v; // 변수 v선언
v = 1; // 데이터 1 할당 

이 두 줄의 코드를 합쳐 놓은 것이다.
즉, 변수 v를 선언하고, v의 값에 1이라는 데이터를 할당한 것.

이 코드를 실행하면,

1) 변수 영역

  1. 변수 영역에 공간이 하나 만들어지고
  2. 그 공간을 식별할 수 있는 식별자 v가 할당된다.
    즉 , 식별자 v가 메모리의 변수 영역 중 어느 공간의 주소의 이름을 v라고 명칭 한 것이다

2) 데이터 영역

  1. 데이터 영역에 공간이 하나 만들어지고
  2. 그 공간에 숫자 1을 값으로 갖게 한다.
  3. 이후 숫자 1을 값으로 갖는 데이터 영역의 주솟값을 변수 영역에서 v 식별자를 찾는다.
  4. 그리고 그 공간의 값으로 데이터 1이 저장된 메모리의 주솟값을 할당받게 된다.
    (얼핏 참조형이라고 볼 수 있다)

왜 변수영역과 데이터 영역을 구분할까?

바로

  • 데이터 변환을 자유롭게 하고,
  • 메모리를 더 효율적으로 관리하고,
  • 중복된 데이터에 대한 처리 효율을 높이기 위함이다.

Primitive Variable (기본형 변수)

  • 출처 : Anthony Alicea — Udemy.com
let a = 5 
let b = a

console.log(a) // => 5
console.log(b) // => 5

a = 1

console.log(a) // => 1
console.log(b) // => 5

1) 기본형 변수의 타입들

Boolean

  • Boolean 은 논리적인 요소를 나타낸다.
  • true 와 false 의 두 가지 값을 가질 수 있다.

Null

Null 타입은 딱 한 가지 값, null 을 가질 수 있다.

Undefined

값을 할당하지 않은 변수는 undefined 값을 가진다.

Number

  • 정수만을 표현하기 위한 특별한 자료형은 없다.
    배정밀도 64비트 형식 IEEE 754 값 (-(253 -1) 와 253 -1 사이의 숫자값) 단 하나만 존재한다.
  • 상징적인 값들도 표현할 수 있다 : +/-Infinity, NaN(숫자가 아님)

String

텍스트 데이터를 나타내는데 사용한다.
immutable(한 번 문자열이 생성되면, 그 문자열을 수정할 수 없다)
하지만, 원래 문자열에서 일부가 수정된 다른 문자열을 만드는건 가능하다.

ex)

  • 원래 문자열에서 각각의 글자를 추출하거나 String.substr()을 사용해서 만든 부분 문자열
  • 접합 연산자 (+) 나 String.concat() 으로 두 문자열을 합친 문자열

Symbol (ES6)

  • Symbol은 유일하고 immutable한 primitive value(기본값) 이다.
  • 객체 속성의 key 값으로도 사용될 수 있다
var v1; // undefinded
var v2 = null; // object
var v3 = 123; // number
var v4 = 1.23; // number
var v5 = true; // boolean
var v6 = false; // boolean
var v7 = "hello"; // string
var v8 = "A"; // string

console.log(typeof v1); // undefined
console.log(typeof v2); // object
console.log(typeof v3); // number
console.log(typeof v4); // number
console.log(typeof v5); // boolean
console.log(typeof v6); // boolean
console.log(typeof v7); // string
console.log(typeof v8); // string

2) 기본형 변수의 특징

  • 불변성 : 한 번 만들어진 값은 가비지 컬렉팅을 당하지 않는 한 영원히 변하지 않는다.
  • 값이 담긴 주솟값을 바로 복제한다.
  • 재할당을 할때 초기 주소 값의 데이터 값이 바뀐다.
var v = 1;
v = v + 1; // v = v + 2;`

var v = 1; 에서 기본형 데이터인 1이 불변 값이라는 뜻이다.
v가 불변성을 가지는 것이 아니다.

v = v + 1, v = v +2 를 보면 1이 2로 변하고 1이 3으로 변한 것처럼 이해할 수 있지만, 식별자 v 가 다른 값을 참조하는 거지 1은 변한 것이 아니다.

즉, 1 은 2 또는 3 처럼 다른 값으로 변경할 수 없다는 것을 불변성이라고 한다.

데이터 1을 가지고 있는 주솟값을 다른 주솟값으로만 변경한 것일 뿐 1은 변하지 않고 그대로 존재한다.

식별자 v 의 값은 변경되었지만 데이터 1은 변하지 않았다는 것.. 모든 기본형에서 마찬가지다.
사용하지 않는 데이터는 가비지 컬렉터에 의해 메모리에서 제거된다.

Reference Variable (참조변수)

  • 출처: Anthony Alicea — Udemy.com
let a = {name: "해리포터"}
let b = a

console.log(a) // => {name: "해리포터"}
console.log(b) => {name: "해리포터"}

a.name = "론위즐리"

console.log(a) // => {name: "론위즐리"}
console.log(b) // => {name: "론위즐리"}

1) 참조형 변수의 타입

Object

  • Array
  • Function
  • RegExp...
var v1 = function() {};
var v2 = new Array();
var v3 = new Date();
var v4 = new Map();
var v5 = new Set();
var v6 = {};

console.log(v1); // [Function]
console.log(v2); // []
console.log(v3); // Sun Jul 12 2020 07:54:46 GMT+0900 (대한민국 표준시)
console.log(v4); // Map {}
console.log(v5); // Set {}
console.log(v6); // {}

console.log(typeof v1); // function
console.log(typeof v2); // object
console.log(typeof v3); // object
console.log(typeof v4); // object
console.log(typeof v5); // object
console.log(typeof v6); // object

2) 참조형 변수의 특징

  • 가변성
  • 값이 담긴 주솟값들로 이루어진 묶음을 가리키는 주솟값을 복제한다.
  • 재할당을 해도 초기 주소의 데이터 값이 바뀌지 않는다.
  • 참조되지 않는 값은 Garbage Collecting을 당하게 된다.
  • 값을 바꾸어도 같은 주소값을 가리키고 있다.
  • 원본이 바뀌기 때문에 불변성의 개념(새로운 객체를 생성)
var obj = { 
  prop1: "hello", 
  prop2: "world" 
}; 

위 코드 실행 시 메모리에서의 변화

  • 프로퍼티를 변경했을 경우
obj.prop1 = "안녕";
obj.prop2 = "하세요";
var obj = { prop1: "hello", prop2: "world" }; 
obj.prop1 = "안녕";
obj.prop2 = "하세요";

작성한 코드의 실행과정을 확인할 수 있는 유용한 사이트

참고 자료

Javascript Passing by Value vs. Reference Explained in Plain English
[Javascript] 데이터 타입과 할당 (typeof, var, memory, 기본형, 참조형, 불변성, 가변성)
코어 자바스크립트 - 1장. 데이터 타입

profile
slowly but surely

0개의 댓글