너무너무 멋져 눈이눈이 부셔

[JS] 자바스크립트 데이터 타입(자료형) 본문

멋있는 JavaScript

[JS] 자바스크립트 데이터 타입(자료형)

강하다이녀석 2024. 3. 28. 22:58
  • 원시 타입 (primitive data type)
    • number
    • string
    • boolean
    • null
    • undefined
    • symbol (New in ECMAScript 6)
  • 객체 타입 (Object data type)
    • object

원시 타입

원시타입은 변경 불가능한 값이며, 값에 의한 전달이다.

 

 

number

숫자 타입은 배정밀도 64비트 부동소수점( -(2^53 -1) 와 2^53 -1 사이의 숫자값 ) 형식을 따른다. 즉, 모든 수를 실수로 처리한다.

  • Infinity : 양의 무한대
  • -Infinity : 음의 무한대
  • NaN : Not-a-Number, 산술 연산 불가
var binary = 0b01000001; // 2진수
var octal = 0o101;       // 8진수
var hex = 0x41;          // 16진수

console.log(binary); // 65
console.log(octal);  // 65
console.log(hex);    // 65

console.log(binary === octal); // true
console.log(octal === hex);    // true

2진수,8진수 등의 데이터 타입이 없어서 참조 시 모두 10진수로 해석된다.

 

 

string

문자열은 변경할 수 없다.

var str = 'Hello';
str = 'world';

기존 'Hello'가 수정되는 것이 아니라 새로운 'world'를 메모리에 생성하는 것이다. 이때, 둘 다 메모리에 존재하고, str 변수가 'Hello'를 가리키고 있다가 'world'를 가리키도록 변경한 것.

 

  • 인덱스(순서)를 통해 접근 가능
  • str[0] = 'N'으로 변경해도 반영되지 않는다(에러 발생 안함)

템플릿 리터럴(ES6부터)

백틱(``)을 통해 런타임 때 문자열로 변환.

// ES6: 표현식 삽입
console.log(`My name is ${first} ${last}.`);

 

boolean

불리언 타입 값은 논리적 참 거짓을 나타내는 true와 false가 있다.

비어있는 문자열과 null, undefined, 숫자 0은 false로 간주된다. 

 

undefined

선언 이후에 값을 할당하지 않은 변수.

- 자바스크립트에서 변수 선언 시 암묵적으로 undefined로 초기화. 

- 개발자가 의도하지 않은 빈 값.

 

null

- 변수에 값이 없다는 것을 의도적으로 명시할 때 사용한다. 

- 변수가 기억하는 메모리 주소의 참조 정보를 제거하는 것이며, 엔진이 이 영역에 대해 가비지 콜렉션을 수행한다.

- typeof 연산자로 null을 연산하면 object가 나온다. 이는 자바스크립트 설계상 오류라고 개발자가 인정했다. 

- 따라서 typeof가 아니라 일치연산자 ===로 타입을 확인해야 한다.

 

symbol(ES6)

다른 값과 중복되지 않는 유일무이한 값.

-Symbol 함수를 호출하여 생성. 

- 일반적으로 이름이 충돌할 일이 없는 객체의 유일 속성 키를 만들기 위해 사용.

  • 이때 생성된 값은 외부에 노출되지 않는다.

객체 타입

자바스크립트는 객체 기반의 언어이며, 거의 모든것이 객체이다.

객체는 데이터와 데이터에 대한 동작(절차, 방법, 기능)을 모두 포함할 수 있는 개념적 존재.

이후 구체적으로 서술.

 

 

왜 데이터 타입이 필요한가요?

1. JS엔진은, 값을 저장할 때 데이터 타입에 따라 정해진 크기의 메모리 공간을 확보한다.

2. 값을 참조할 때 한 번에 읽어 들여야 할 메모리 공간의 크기를 결정해야 한다.

3. 메모리에서 읽어 들인 2진수를 어떻게 해석해야하는지 결정할 때 필요하다. 

 

 

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

- 변수에 할당되어 있는 값을 통해 추론해서 변수 타입이 동적으로 결정.(타입 선언 x)

 

단점 

  • 유연성은 높지만 신뢰성이 떨어짐
  • 암묵적으로 타입이 변환될 때도 있음. 
  • 값 변경에 의해 타입도 변경될 수 있다. 

의도치 않은 side Effect가 발생할 수 있다!

 

-> 해결 방안

1. 변수는 필요한 경우에 제한적으로 사용해라 : 변수 개수가 많으면 오류 확률도 높아짐

2, 변수 유효범위(스코프)는 좁게 만들어서 부작용을 줄여라

3. 전역변수 사용 지양 : 프로그램 복잡성을 증가

4. 변수보다 상수를 사용해서 값의 변경 억제

5. 변수 네이밍을 의미를 명확히 파악할 수 있도록 하라.