간단정리

[JS] 원시타입 || 기본 자료형 (Primitive Type)

RyuK-H 2020. 7. 8. 10:11

Javascript에서는 원시 타입(Primitive Type)참조 타입(Reference Type) 두 가지 자료형을 제공한다. 자바스크립트는 느슨한 타입 언어 || 동적 언어이다. 이 말은 변수의 타입을 미리 지정할 필요가 없다는 의미이다. 타입은 프로그램이 처리되는 과정에서 자동으로 파악되고, 같은 변수에 여러 타입의 값을 넣을 수 있다는 뜻이다.

 

* 그렇기 때문에 프로그램 규모가 커질 수록, Typescript와 같은 대체제를 사용한다. (타입에 따른 실수를 방지 하기 위한 방법이자 도구이다.)

  var test;             // undefined
  test = null;          // null    
  test = 1206;          // Number
  test = "Ryuk";        // String
  test = true;          // Boolean
  test = Symbol("key"); // ES6 추가 Symbol

(1) undefined

* 선언되었지만, 초기화가 되지 않음을 의미한다.

* undefined 타입은 undefined만 갖을 수 있다.

* 초기화가 진행 된 변수를 다시 undefined로 초기화를 할 수 있다. 하지만, 다시 값이 없음을 의미하기 위해 null이 존재하기 때문에 우리는 값이 undefined일 경우 초기 생성 된 상태라는 것으로 상태를 사용할 수 있을 것 이다.

  var test;               // undefined
  test = "something";     // string

  // undefined 하지만, 보통 초기화 된 상태에서는 다시 undefined으로 초기화 하지 않는다.
  test = undefined;       // undefined

(2) null

* 값이 없음을 의미한다.

* null 타입은 null만 갖을 수 있다.

  var test;       // undefined
  test = null;    // null

(3) Boolean

* 논리적 요소를 나타내는 타입이고, true와 false 두 값을 갖을 수 있다.

* 0 - false 그 외, 모든 값은 true이다.

(4) Number

* 정수, 실수, 음수를 표현할 수 있다.

* +,- Infinity / +,- 0 / Number.MAX_VALUE, Number.MIN_VALUE / NaN (숫자 아님)등 다양한 상수값과 무한대, 0을 양수 음수로 표현하는 등 많은 기능이 있다.

* Number.MAX_SAFE_INTEGER(9007199254740991), Number.MIN_SAFE_INTEGER (-9007199254740991) 해당 범위를 벗어나면 JS에서 숫자는 더 이상 안전하지 않다.

* 다루는 숫자가 커진다면, BigNumber 라이브러리를 활용하거나 직접 만들어야 한다. 16자리가 넘어간다면 JS Number를 다시 찾아봐야한다는 정도만 인지 하고 넘어가면 될 것 같다.

(5) String

* 문자 || 텍스트를 나타내는 타입이다.

* 정규식을 통하여, string 형식을 바꿀 수 있다.

* JS 문자열은 변경 불가능 상태(immutable)이다. 문자열이 한번 생성 되면, 중간중간 특정 값들을 수정할 수 없다는 이야기다. 하지만, String.substr(), String.concat() 등을 활용하여 다시 변수에 대입하여 재활용 할 수 있다.

  // 정규식을 통한 toLocaleString()
  // 1206 -> 1,206

  var test = 1206;
  test.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1,");
  var test = "안냐세여~~"

  // immutable하기 때문에 ~~ 만 삭제할 수 없다.
  // 하지만, 함수들을 활용해서 변경할 수 있다.

  test = test.substr(0, 4);  // 안냐세여

(6) Symbol

* ES6 (ECMAScript 6)에서 추가 되었다. symbol은 유일하고 변경 불가능(immutable)한 타입이다.

* 객체 속성의 key값으로 사용 될 수 있고, C언어의 enum과 비슷하다.

* Symbole을 정확하게 이해하고 공감하려면, object & key에 대하여 먼저 알아야할 것 같다.

  var symbol = Symbol("abc");   // Symbol(abc)
  var symbol2 = Symbol("abc");   // Symbol(abc)

  // 같은 값의 key를 대입하여도, Symbol로 선언하면 같지 않다.