더북(TheBook)

3.1 원시형

 

“자바스크립트의 원시형(primitive)을 차례대로 말해보세요.” 개발자 채용 면접 시 항상 우리가 던지는 질문이다. 가장 흔한 대답은, “var 하나밖에 없습니다.” (깊게 한숨을 내쉰 후) 마치 C# 안내서를 집필이라도 하듯 기억나는 타입을 모조리 얘기하는 개발자들도 있다. 어쨌든 둘 다 정답이 아니다.

자바스크립트 원시형은 5개, 즉 문자열(String), 숫자(Number), 불(Boolean), null, undefined가 전부다. 여러분도 이미 알고 있듯이 자바스크립트 엔진은 필요하다면 기묘한 방법으로 타입 간 강제 변환을 하지만, 어쨌든 ECMAScript 5 명세 기준으로 원시형은 이 5개뿐이다(ECMAScript 6부터 심볼(Symbol)이 추가됐다. 객체는 원시형에 속하지 않는다).

원시형 변수는 값은 있되 프로퍼티가 없어서 다음 코드는 에러가 날 것 같지만, 문제없이 실행된다.


var str = "abcde";
console.log(str.length); // 실행 결과: 5

str에 분명히 length 프로퍼티 같은 건 없는데 에러가 안 나는 이유는 뭘까? 자바스크립트 엔진은 str.length에서 잠시 멈추고 “흠…… 객체로 뭘 하려나 보는군. 하나 만들어주지, 뭐”하고 짐작한다. 그래서 str에서 String 객체를 만들어내고 이 객체의 length 프로퍼티 값을 참조한다. 물론 이렇게 만든 String 객체는 곧바로 가비지 컬렉션 대상이 된다.

문자열, 불, 숫자 타입 모두 그들만의 객체 래퍼(wrapper), 즉 String(값), Boolean(값), Number(값)를 지닌다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.