자바스크립트의 타입이란

Jin·2022년 3월 1일
0

Javascript

목록 보기
1/22

타입이란

자바스크립트 (이하 JS) 에서 타입이란 JS 엔진, 개발자 모두에게 어떤 값을 다른 값과 분별할 수 있는, 고유한 내부 특성의 집합으로 정의할 수 있습니다.

예를 들면, 24와 "24" 라는 값은 다르게 취급됩니다. 24는 수학 연산 같이 계산을 하려는 의도가 있지만 "24"는 특정 페이지에 출력할 문자열과 같은 의도로 만든 값입니다.

이렇듯 다른 값과 분류되는 특성을 지닌 것이 타입의 필수조건이 됩니다.

내장 타입

자바스크립트에는 7가지의 내장 타입이 존재합니다.

  • null
  • undefined
  • boolean
  • number
  • string
  • object
  • symbol

object를 제외한 나머지 6가지 타입을 primitive (원시) 타입이라고 합니다.

값 타입은 typeof 연산자로 확인할 수 있습니다. 예상과 다르게 typeof의 결과는 타입의 종류와 1대1 매칭되지 않습니다.

typeof undefined === "undefined"; // true
typeof true === "boolean"; // true
typeof 42 === "number"; // true
typeof "42" === "string" // true
typeof {age: 27} === "object"; // true
typeof Symbol() === "symbol" // true

위의 녀석들과 다르게 null은 특별한 녀석입니다.

typeof null === "null" // false
typeof null === "object" // true

null의 타입은 object입니다.

그래서 타입으로 null 값을 정확히 확인하려면 하나의 조건이 더 필요합니다.

const a = null;
(!a && typeof a === "object") // true

null은 false로 취급되면서 타입은 object인 특별한 존재입니다.

그리고 사실, typeof가 반환하는 문자열은 하나가 더 있습니다.

typeof function aa() { ... } === "funciton" // true

그것은 바로 function입니다. function은 사실 object의 하위 타입으로 구체적으로는 '호출 가능한 객체' 타입입니다.

배열 또한 그냥 객체 타입으로 취급됩니다.

여기서 부가적인 정보를 드리자면, JS에서 함수에 선언된 파라미터의 개수는 함수 객체의 length 프로퍼티로 확인할 수 있습니다.

function a(b, c) { ... }

console.log(a.length); // 2

변수가 아니라 값이 타입을 가진다

타입 강제를 하지 않는 JS에서 변수를 선언하는 것은 무엇이든 담을 수 있는 상자를 메모리 상에 만드는 것과 동일합니다. 여기에 숫자를 넣으면 number 타입이 되는 것이고 문자열을 넣으면 string 타입이 되는 것입니다.

JS의 특이한 점은 값이 없는 경우와 선언이 되지 않은 경우에 타입을 동일하게 명시한다는 것입니다.

let a;
typeof a; // "undefined"

let b = 24;
let c;

b = c;

typeof b; // "undefined"
typeof c; // "undefined"

/*
 값이 없는 경우에는 undefined 타입입니다.
*/

let d;

typeof d; // "undefined"
typeof e; // "undefined"

/*
e는 선언되지도 않았지만 undefined 타입으로 처리됩니다.
*/

위와 같이 선언조차 하지 않은 변수의 타입을 확인할 때에 오류 처리를 하지 않을 것은 typeof 만의 독특한 safe guard라고 할 수 있습니다.

위에서 언급한 JS의 타입 특성을 활용하여 로직 상에서

const aa = bb();

if (typeof aa !== "undefined") {
...

이런 식으로 먼저 타입을 체크하는 습관이 안전한 코드를 만들 수 있습니다.

profile
배워서 공유하기

0개의 댓글