자바스크립트 객체의 분류

자바스크립트 객체는 다음과 같이 크게 3개의 객체로 분류할 수 있다.

표준 빌트인 객체

자바스크립트는 Object, String, Number, Boolean, Symbol, Date, Math, RegExp, Array, Map/Set, WeakMap/WeakSet, Function, Promise, Reflect, Proxy, JSON, Error 등 40여 개의 표준 빌트인 객체를 제공한다.

Math, Reflect, JSON을 제외한 표준 빌트인 객체는 모두 인스턴스를 생성할 수 있는 생성자 함수 객체다. 생성자 함수 객체인 표준 빌트인 객체는 프로토타입 메서드와 정적 메서드를 제공하고 생성자 함수 객체가 아닌 표준 빌트인 객체는 정적 메서드만 제공한다.

원시값과 래퍼 객체

문자열이나 숫자, 불리언 등의 원시값이 있는데도, 표준 빌트인 생성자 함수가 존재하는 이유는 무엇일까? 이는 원시값에서 프로퍼티나 메서드를 사용하기 위해서이다.

원시값에 객체처럼 마침표 표기법으로 접근하면 자바스크립트 엔진이 일시적으로 원시값을 객체로 변환한다. 이렇게 임시로 생성되는 객체를 **래퍼 객체(Wrapper object)**라고 한다.

즉, 래퍼 객체를 생성하여 생성된 객체로 프로퍼티에 접근하거나 메서드를 호출하고 원시값으로 되돌린다.

예를 들어, String에 마침표 표기법으로 접근하면 String 생성자 함수의 인스턴스가 생성되고 문자열은 래퍼 객체의 [[StringData]] 내부슬롯에 할당된다.

전역 객체

전역 객체는 표준 빌트인 객체와 환경에 따른 호스트 객체, 그리고 var 키워드로 선언한 전역변수, 함수를 프로퍼티로 갖는다.

빌트인 전역 프로퍼티/함수