Home 래퍼 객체 Wrapper Object
Post
X

래퍼 객체 Wrapper Object

원시 타입

참고 글 : 원시 타입과 참조 타입

자바스크립트의 데이터 타입 중 원시 타입number, bigint, string, boolean, null, undefined, symbol 7개로 메서드를 따로 갖지 않는 특징이 있습니다.

다음 코드를 보겠습니다.

1
2
3
4
let str = "foo";

console.log(typeof str); // 출력 값 : strung
console.log(str.includes("f")); // 출력 값 : true

위 코드에서 str은 마치 메서드가 있는 것처럼 동작합니다.

자바스크립트 엔진이 내부적으로 래퍼 객체로 변환하여 메서드를 호출하는 것입니다.


래퍼 객체 Wrapper Object

래퍼 객체는 자바스크립트에서 원시 타입 변수를 객체처럼 다룰 수 있도록 변환한 객체입니다.

임시적으로 변환한 래퍼 객체는 재사용하지 않으며, 사용한 직후 가비지 컬렉션(GC)이 회수합니다.

사용 직후 회수하기 떄문에 프로퍼티를 추가해도 사용할 수 없습니다.


간단 예제

문자열 변수에서 메서드를 사용하면, 자바스크립트 엔진은 내부적으로 new String()을 호출하여 임시적으로 기본 타입인 string을 래퍼 객체인 String으로 변환합니다.

1
2
3
4
let str = "foo";

console.log(typeof str); // 출력 값 : string
console.log(str.length); // 출력 값 : 3

자바스크립트 엔진은 위에서 작성된 소스 코드를 다음과 같이 해석합니다.

1
2
3
4
5
6
7
8
// JavaScript 엔진이 해석하는 소스 코드
let str = new String("foo");

console.log(typeof str); // 출력 값 : object
console.log(str.length); // 출력 값 : 10

str.prop = "temp";
console.log(str.prop); // TypeError: Cannot create property 'prop' on string 'foo'

특징

래퍼 객체에는 프로퍼티를 추가할 수 없고 new 연산자를 이용해 명시적으로 선언해야 프로퍼티를 추가할 수 있습니다.

1
2
3
4
5
6
7
let str = new String("foo");

console.log(typeof str); // 출력 값 : object
console.log(str.length); // 출력 값 : 10

str.prop = "temp";
console.log(str.prop); // 출력 값 : temp

원시 타입과 래퍼 객체는 동등 연산자 (==)로는 이 둘을 구분할 수 없고 엄격한 동등 연산자 (===)로 구분할 수 있습니다.

1
2
3
4
5
let str = "foo";
let Str = new String("foo");

console.log(str == Str); // true
console.log(str === Str); // false
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.