자바스크립트는 원시값(문자열, 숫자 등)을 마치 객체처럼 다룰 수 있게 해줍니다.
원시값에도 객체에서처럼 메서드를 호출할 수 있지만, 원시값은 객체가 아니라는 것을 절대 잊지 마세요!
원시값:
문자(string)
, 숫자(number)
, bigint
, 불린(boolean)
, 심볼(symbol)
, null
, undefined
형으로 총 일곱 가지 입니다.객체:
{}
를 사용해 만들 수 있습니다. 여러 종류의 객체가 있는데, 함수도 객체의 일종입니다.객체의 장점 중 하나는 함수를 프로퍼티로 저장할 수 있다는 것입니다.
let MaaMaaj = {
name: "MooMooj",
sayHi: function() {
alert("친구야 반갑다!");
}
};
MaaMaaj.sayHi(); // 친구야 반갑다!
객체 MaaMaaj를 만들고, 거기에 메서드 sayHi를 정의했습니다.
자바스크립트 창안자는 여기서 모순적이 상황을 해결해야했습니다.
자바스크립트 창안자는 아래와 같은 방법을 사용해 해결책을 모색하였습니다.
원시 래퍼 객체(object wrapper)
"를 만들어 줍니다."래퍼 객체"는 원시 타입에 따라 종류가 다양합니다. 각 래퍼 객체는 원시 자료형의 이름을 그대로 차용해, String
,Number
,Boolean
, Symbol
라고 부릅니다. 래퍼 객체 마다 제공하는 메서드 역시 다릅니다.
예제 코드를 보면서 알아봅시다.
let str = "Hello";
alert( str.toUpperCase() ); // HELLO
위 코드를 보며 원시값의 메서드를 사용 시 내부에서 어떠한 일이 일어나는지 알아봅시다.
str
은 원시값이므로 원시값의 프로퍼티(toUpperCase)에 접근하는 순간 특별한 객체가 만들어집니다. (위에서 설명한 원시 래퍼 객체)이러한 내부 프로세스를 통해 원시값을 가볍게 유지하면서 객체처럼 메서드를 호출 할 수 있습니다!