카테고리 없음

[Javascript] 래퍼 객체란?

여니's 2021. 3. 25. 18:24

1. 원시 타입 (Primitive type)

문자, 숫자, bigint, 불린타입, null, undefined, symbol


2. 래퍼 객체 (Wrapper Object)

- 원시 타입에 대응하는 객체

- string, number, boolean, symbol

- 원시 타입을 감싸는 형태로 사용된다.

>> 문자열의 프로퍼티에 접근하려고 할 때 new String을 호출한 것처럼

문자열 값을 객체 값으로 임시 변환해주고

이 객체를 래퍼 객체라고 한다.

 

순간적으로 생성되었다가 사라지는 객체!

 

let apple='apple';
apple.someProperty=111; // new String(a).someProperty=111
apple.someProperty; // undefined

string 자료형을 임시로 래퍼 객체로 변환한다.

하지만, 다시 꺼내서 출력할 땐 undefined이다.

왜 undefined일까?

> 임시 객체는 프로퍼티의 참조가 끝나면 소멸되기 때문이다.

 

래퍼 객체 변환 과정

1. 원시타입에 해당하는 객체가 생성된다.

2. 이 객체의 메서드가 호출된다.

3. 메서드 처리 후 이 객체는 소멸된다.

4. 원래의 원시타입만 남는다.

 

참조가 끝나면 써먹지도 못하는 데

왜 래퍼객체를 사용해야 하지..?

 

이유는 여러가지가 존재한다.

1.

객체는 다양한 프로퍼티와 메서드가 있어서 유용하지만,

무겁고 느리다는 단점이 있다.

 

2.

원시타입은 반대로 가볍고 빠르지만,

값 이상 그 이하의 의미도 아니다.

 

3. 

그래서 원시 타입을 사용하는 대신,

메서드를 호출할 때만 잠깐 객체로 쓰고 다시 돌려주는 것!

 

 

원시 타입의 문자열 != string 객체

같은 string 객체라도 동일하지 않음.

string 객체는 개별 객체라서, 자기 자신과만 동일하다.

 

a.someProperty 에서 .은 프로퍼티 참조 연산자

 

let str = "Hello";
console.log(str.length);
// str은 원시값이니까, 원시값의 프로퍼티(length)에 접근하는 순간,
// 특볋한 객체가 만들어진다. 
// 출력되고, 특별한 객체는 파괴되며, 원시갑 str만 다시 남게 된다.

참고 출처

ko.javascript.info/primitives-methods