프로그래밍/JavaScript

[JS] JS 데이터 타입

JellyApple 2023. 7. 31. 22:01

이번에 CS 스터디를 진행하면서 맡은 부분과 평소 궁금했던 부분들을 적어보고자 합니다.

JS part에서  중요하다 생각되는 데이터 타입을 1부에서 그리고 평소 헷갈려하던 Promise와 Callback 함수에 대해 2부에서 좀 더 깊게 공부하는 시간을 가졌습니다. 
참고 자료는 JavaScript Mdn 공식 문서와 모던 자바스크립트 Deep dive를 참고 했습니다. 

 

1. 데이터 타입 

데이터 타입이란 값의 종류를 뜻하며 줄여서 타입이라고도 합니다. JavaScript는 느슨한 타입의 동적(dynamic) 언어입니다. 즉 모든 타입의 값으로 할당이 가능하다는 특징이 있습니다. 또 한편으로 자바스크립트의 모든 값은 데이터 타입을 갖는다라는 점이 특징입니다. 

 

2.  데이터 타입의 종류

자바스크립트는 총 7개의 데이터 타입을 제공하는데 이는 원시 타입(primitive type)과 객체 타입(object type)으로 나뉘어집니다.

원시 타입은 정수, 실수 , 문자 , 논리 리터럴의 실제 데이터 값을 저장하는 타입을 말합니다. 

객체 타입은 객체, 함수 , 배열 등의 데이터 타입을 말합니다. 

 

1) 원시 타입 종류

  • 숫자(Number) 타입 : 숫자. 다른 언어와 달리 정수, 실수 구분 없이 하나의 숫자 타입만 존재합니다.
    * JS에서는 진수를 표현하기 위한 데이터 타입을 따로 제공하지 않기 때문에 모두 10진수로 처리합니다. 
    * Infinity : 양의 무한대 / -Infinity : 음의 무한대 / NaN : 산술 연산 불가(not - a - number) 
  • 문자열(String) 타입 : 문자열 타입 , 키워드나 식별자 같은 토큰과 구분하기 위해 따옴표로 감쌉니다. 
    * 자바스크립트의 문자열은 원시타입이며, 변경 불가능한 값이다. 
    * 작은 따옴표(' ') : 가장 일반적인 표기법 
    * 큰 따옴표(" ") 
    * 백틱(` `) 
var first = 'Jong-su';
var last = 'Jin';

console.log('My name is ' + first + ' ' + last + '.'); // My name is Jong-su Jin.
  • 불리언(Boolean) 타입 : true와 false 
  • Null 타입 : 값이 없다는 것을 의도적으로 명시 할 때 사용하는 값 , 불리언 연산에서는 null을 거짓으로 취급 합니다.
    * 자바스크립트에서는 대소문자를 구별하므로 null, Null NULL 모두 다 다르다. null 을 사용해야 합니다. 
console.log(typeof null); // "object"

* 버그로 여겨지지만 object를 반환합니다. 

  • Undefined 타입 : var 키워드로 선언된 변수에 암묵적으로 할당되는 값
    * var 키워드로 선언된 변수는 암묵적으로 undefined로 초기화 됩니다. 메모리 공간을 처음 할당이 이뤄질 때까지 빈 상태로 냅두지 않고 undefined로 초기화 합니다. <-> 값이 없음을 명시하고 싶을 때는 null을 할당 합니다. 
  • 심벌(Symbol) 타입 : ES6에서 추가된 7번째 타입 , 변경 불가능한 원시 타입의 값, Symbol 함수를 호출해 생성함. 
    * 절대 중복되지 않는 유일무이 값
var key = Symbol('key');
console.log(typeof key); // symbol 

// 사용 예제 

var obj = {};

obj[key] = 'value'; // 이름이 충돌할 위험이 없는 유일무이한 값인 심벌을 프로퍼티 키로 사용한다.

2) 객체 타입 

* 자바스크립트는 객체 기반의 언어이며, 자바스크립트를 이루고 있는 거의 모든 것이 객체라는 것입니다.

 

3. 데이터 타입의 필요성
1) 메모리 공간의 낭비 방지 : 자바스크립트 엔진은 데이터 타입, 즉 값의 종류에 따라 정해진 크기의 메모리 공간을 확보합니다.  또한 값을 참조할 때 한 번에 읽어 들여야 할 메모리 공간의 크기를 결정하기 위해 데이터 타입은 필요합니다. 
* 데이터 타입에 따라 확보되는 메모리 공간의 크기는 숫자 : 배정밀도 64비트 부동소수점 형식 사용 = 8 바이트 나머지는 엔진 제조사의 구현에 따라 각기 달라짐
* 예를 들어 숫자가 선언 됐는데 8바이트로 안읽어오면 값이 훼손 될 우려가 있다.

 

2) 데이터 타입에 의한 값의 해석 : 모든 값은 데이터 타입을 가지며, 메모리에 2진수 즉 비트의 나열로 저장되는데 이를 문자열로 해석 할 지 숫자로 해석할 지에 대해 명확한 답을 결정하기 위해서 데이터 타입을 사용 합니다. 

4. 데이터 타입 선언 방식

1) 명시적 타입 선언 : C/JAVA 같은 정적 타입 언어와 같이 사전에 데이터 타입을 선언해야 하는 경우
2) 동적 타입 : 자바스크립트는 변수의 타입이 동적으로 결정되고 얼마든지 타입을 자유롭게 변경 할 수 있습니다. 

5. 변수를 사용할 때 주의 사항

1) 변수는 꼭 필요한 경우에 한해 제한적으로 사용합니다. 동적 타입 특성상 잘못된 타입을 예측해 오류를 가져올 수 있기 때문입니다.

2) 변수의 유효 범위(스코프)는 최대한 좁게 가져 갑니다.

3) 전역 변수는 지양하고자 합니다. 어디든 값이 선언되고 변경될 수 있는 값은 오류를 가져올 가능성이 큽니다.

4) 변수보다는 상수를 사용해 값의 변경을 억제합니다. 
5) 변수 이름은 변수의 목적이나 의미를 파악할 수 있도록 네이밍 합니다.