본문 바로가기

JavaScript

[JS] 모던 자바스크립트 - 02. 데이터 타입

728x90
반응형

데이터 타입


자바스크립트(ES6)는 기본형참조형으로 나뉘는 7개의 데이터 타입을 제공.

 

 

자바스크립트의 데이터 타입

 

- 기본형 데이터 (원시 타입)


- 할당이나 연산 시 복제됨.
- 메모리 저장 시 변수 영역과 데이터 영역을 활용하여 저장.

- 불변성을 띈다 → 재할당 시  저장된 값을 변경 하는 것이 아니라 새로운 데이터를 만든 뒤 그 데이터의 주솟값을 저장함. 

 

1. 숫자 타입 (Number)

- 모든 수를 실수로 처리, 정수만 표현하기 위한 데이터타입이 별도로 존재하지 않음.

- 2진수, 8진수, 16진수를 포현하는 데이터 타입이 없으므로, 이 값들을 참조할 경우 모두 10진수로 해석.

- 숫자 타입은 세 가지 특별한 값도 표현 가능하다.

  - Infinity : 양의 무한대

  - -Infinity : 음의 무한대

  - NaN : 산술 연산 불가 (not-a-number)

 

2. 문자열 타입 (String)

- 작은따옴표(' '), 큰따옴표(" ") 또는 백틱(` `)으로 텍스트를 감싸 사용. 일반적으로는 작은 따옴표 사용.

- 원시 타입으로서, 변경 불가능한 값이다. (C는 문자의 배열로, 자바는 객체로 문자열을 표현하는 것과 비교했을 때 다르다.) 

- 템플릿 리터럴 :  ES6부터  도입된 새로운 문자열 표기법으로서, 백틱을 사용해 표현

  - 멀티라인 문자열, 표현식 삽입, 태그드 탬플릿 등 편리한 문자열 처리 기능 제공, 런타임에 일반 문자열로 변환되어 처리. 

  (태그드 탬플릿은 템플릿 리터럴의 표현식을 분해할 수 있는 기능) 

 

3. 불리언 타입 (Boolean)

- 논리의 참, 거짓을 나타내는 true, false 두 가지 뿐이다.

 

4. undefined 타입 (undefined)

- var 키워드로 선언한 변수는 암묵적으로 undefined로 초기화.

- 개발자가 의도적으로 할당하기 위한 값이 아닌, 자바스크립트 엔진이 변수를 초기화 할 때 사용하는 값.

  →  직접 할당한 undefined는 실존하는 데이터가 되고, 자바스크립트 엔진이 반환하는 경우는 문자 그대로 값이 없음을 나타내는 것. (직접 undefined를 할당하지 않기)

 

자바스크립트 엔진이 undefined를 반환하는 경우는 총 세가지.

사용자가 당연히 어떤 값을 지정할 것이라고 예상되는 상황임에도 실제로는 그렇게 하지 않을 때.

1. 값을 대입하지 않은 변수

2. 객체 내부의 존재하지 않는 프로퍼티에 접근할 때

3. return 문이 없거나 호출되지 않은 함수의 실행 결과

+ 4. 선언하지 않은 변수를 typeof 연산자로 연산한 경우 undefined 반환

 

5. null 타입 (null)

- 변수에 값이 없다는 것을 의도적으로 명시, 의도적으로 부재를 나타낼 때 사용.

- 함수가 유효한 값을 반환할 수 없는 경우 명시적으로 null을 반환하기도 함.

  ex) documnet.querySelector 메서드는 HTML 요소를 검색할 수 없는 경우 null을 반환.

- type of null 이 object라는 점을 주의.

 

6. 심벌 타입 (Symbol)

- 변경 불가능한 원시 타입의 값. 다른 값과 중복되지 않는 유일무이한 값.

- 다른 원시 값은 리터럴을 통해 생성하지만, 심벌은  Symbol 함수를 통해 생성.

- 생성된 심벌은 외부에 노출되지 않음.

 

 

 

- 참조형 데이터 (객체 타입)


- 할당이나 연산 시 참조됨. 

- 메모리 저장 시 변수 영역과 객체의 변수 영역, 데이터 영역을 활용하여 저장.

- 가변성을 띈다  → 데이터 영역에 저장된 값은 모두 불변 값이지만, 객체의 변수 영역에는 다른 값을 대입 할 수 있기 때문.

  (데이터 자체 변경 시에는 아니고, 그 내부의 프로퍼티를 변경할 경우에만 가변적)

- 예외적으로 불변값으로 활용하는 방법도 있음. 

- Array, Function, Date, RegExp, Map, WeakMap, Set, WeakSet 

 

 

 

데이터 타입이 필요한 이유?


- 메모리 공간의 확보와 참조를 위해

- 데이터 값의 해석을 위해 

 

 

자바스크립트는 동적 타입 언어


정적 타입 언어 (static/strong type)

- 명시적 타입 선언,변수를 선언할 때 데이터 타입을 사전에 선언해야 함

- 변수의 타입을 변경할 수 없음

- 컴파일 시점에 타입 체크(올바른 데이터 타입을 사용했는지 확인)를 수행

- C, C++, Java, Kotlin, Go, Haskell, Rust, Scala 등

 

동적 타입 언어 (dynamic/weak type)

- 변수 선언 시 데이터 타입을 따로 선언하지 않음

- 어떤 데이터 타입의 값도 자유롭게 할당 가능

- 값을 할당하는 시점에 변수의 타입이 동적으로 결정 (타입 추론, type inference)

- JavaScript, Python, PHP, Ruby, Lisp, Perl 등

 

→ 유연성은 높지만 신뢰성은 떨어짐

 

 

 

 

 

 

 

출처

- 모던 자바스크립트 Deep Dive - 자바스크립트의 기본 개념과 동작 원리
- 코어 자바스크립트 

728x90
반응형