데이터 타입

1 minute read


원시 데이터 타입

데이터의 형태는 크게 객체와 객체가 아닌 것 두가지로 구분할 수 있다. 여기서 객체가 아닌 데이터 타입을 원시 데이터 타입(primitive type)이라고 한다.

객체가 아닌것?

  • 숫자

  • 문자열

  • 불리언

  • null

  • undefined

이외의 모든 데이터 타입은 객체다.


레퍼 객체

var str = 'coding';
console.log(str.length);
// 6
console.log(str.charAt(0));
// "c"

str은 객체가 아니지만 객체처럼 사용이 되어진다.

. : 객체 접근 연산자(object access operator)

문자열 값인 str이 객체 접근 연산자로 접근이 가능한데 그럼 문자열은 객체라는 것인데 처음의 내용과 모순이 된다.

하지만 이런 현상이 생겨난 이유는 자바스크립트에서는 문자열을 저장할 때 객체지향 측면에서나 접근과 관리 등 통일성을 위해서 원시 데이터 타입을 임시로 객체로 만들기 때문이다.

즉 문자열 자체는 원시 데이터이지만 자바스크립트에서 사용이 용이하도록 객체로 변환시켜 사용한다는 것이다.

처리과정 확인

var str = 'coding';
str.prop = 'everybody';
console.log(str.prop);
// undefined

str 객체 안에 prop라는 프로퍼티를 정해서 everybody 문자열을 저장했지만 출력결과 undefined이 뜬다.

문자열을 객체처럼 사용하려고 했지만 str.prop = ‘everybody’; 의 작업이 끝나고 다음 작업으로 넘어가는 순간 내부적으로 변환되었던 객체가 지워지게 되어 다음줄에서 접근을 해도 값을 찾지 못하는 것이다.

이렇게 원시 데이터를 객체처럼 사용할 때 자바스크립트 내부적으로 자동으로 만들어지는 객체를 레퍼 객체(wrapper object)라고 한다.

원시 데이터의 레퍼 객체

  • 숫자 -> Number

  • 문자열 -> String

  • 불리언 -> Boolean

  • null -> x (존재하지 않음)

  • undefined -> x (존재하지 않음)

null과 undefined의 경우 레퍼객체가 존재하지 않기 때문에

null.prop = 'bak';

이와 같은 접근은 타입에러가 발생한다.