자바스크립트의 래퍼 객체
이 기사는 자바스크립트에서 래퍼 객체에 대해 설명합니다.
YouTube Video
래퍼 객체
JavaScript는 기본 타입과 이를 다루기 위한 객체(래퍼 객체)를 가지고 있습니다.
기본 타입
원시 타입은 단일 값을 나타내며 간단하고 가볍습니다. 이것들은 불변(변경 불가)이며 객체 메서드나 속성을 직접적으로 가지지 않지만, 연산을 위해 임시로 래퍼 객체로 변환될 수 있습니다.
string과 number는 원시 타입의 예입니다. 반면에, 래퍼 객체는 String과 Number처럼 대문자로 시작합니다.
래퍼 객체
JavaScript에서는 기본형을 조작하기 위해 임시 래퍼 객체(Object 래퍼)를 생성합니다. 래퍼 객체는 기본형을 위한 메서드와 속성을 포함하고 있습니다.
Number
1let numObject = new Number(42); // Wrapper object
2
3console.log(typeof numObject); // object
4console.log(numObject.valueOf()); // 42
5
6let numValue = Number(42); // Return primitive value
7
8console.log(typeof numValue); // number
9console.log(numValue); // 42
Number는 기본형number를 래핑하는 객체 유형입니다.Number객체를 명시적으로 생성하면 숫자를number처럼 다룰 수 있지만, 일반적으로 기본형number를 사용하는 것이 권장됩니다.
typeof numObject는"object"이지만,typeof 42는"number"입니다.
new연산자를 사용하여 새로운 래퍼 객체를 생성하는 것은Number를 함수로 호출하는 것과 다른 결과를 낸다는 점에 유의하세요. 함수로 호출하면 원시 타입number가 반환됩니다.
String
1let strObject = new String("Hello"); // Wrapper object
2
3console.log(typeof strObject); // object
4console.log(strObject.valueOf()); // Hello
- 이것은 기본형
string을 래핑하는 객체 유형입니다.String객체를 사용하면 문자열의 속성과 메서드에 접근할 수 있지만, 일반적으로는 기본형string을 사용합니다.
typeof strObject는"object"이지만,typeof "Hello"는"string"입니다.
Number와 마찬가지로,String을 함수로 호출하면 기본형string을 반환합니다.
Boolean
1let boolObject = new Boolean(true); // Wrapper object
2
3console.log(typeof boolObject); // object
4console.log(boolObject.valueOf()); // true
- 이것은 기본형
boolean을 래핑하는 객체 유형입니다.Boolean객체를 명시적으로 생성할 수도 있지만, 일반적으로는 기본형boolean을 사용합니다.
typeof boolObject는"object"이지만,typeof true는"boolean"입니다.
Number와 유사하게,Boolean을 함수로 호출하면 기본형boolean을 반환합니다.
BigInt
1let bigIntObject = Object(9007199254740991n); // Wrapper object
2
3console.log(typeof bigIntObject); // object
4console.log(bigIntObject.valueOf()); // 9007199254740991n
5
6let bigIntValue = BigInt(9007199254740991); // Return primitive BigInt
7
8console.log(typeof bigIntValue); // bigint
9console.log(bigIntValue); // 9007199254740991n
10
11// Error
12let bigIntObject2 = new BigInt(9007199254740991n);Objectを使ってBigIntのラッパーオブジェクトを生成できますが、通常はプリミティブ型のbigintを直接使うのが一般的です。
typeof bigIntObjectは"object"であるのに対し、typeof 9007199254740991nは"bigint"です。
BigIntを関数として呼び出すとプリミティブなbigintを返しますが、new演算子をつけてBigIntのラッパーオブジェクトを生成することはできません。
Symbol
1let symObject = Object(Symbol("id")); // Wrapper object for Symbol
2
3console.log(typeof symObject); // object
4console.log(symObject.valueOf()); //
Object를 사용하여Symbol의 래퍼 객체를 생성할 수 있지만, 일반적으로는Symbol기본형을 직접 사용하는 것이 좋습니다.
기본형과 래퍼 객체의 차이점
- 기본형은 가볍고 메모리 효율적이지만, 직접적인 속성이나 메서드를 가지지 않습니다. 그러나 JavaScript에서는 기본형을 사용할 때에도 필요 시 메서드와 속성을 제공하기 위해 임시 래퍼 객체가 자동으로 생성됩니다.
1let text = "Hello";
2
3// A temporary String object is created,
4// allowing access to the length property
5console.log(text.length);- 래퍼 객체는 명시적으로 생성되는 객체로, 메모리와 성능에 영향을 줄 수 있으므로 기본형을 사용하는 것이 일반적으로 권장됩니다.
결론
- 원시 타입: 직접적인 메서드를 가지지 않는
number,string,boolean,null,undefined,symbol과 같은 가벼운 타입들. - 래퍼 객체: 원시 타입에서 임시로 변환된
Number,String,Boolean과 같은 객체들.
위의 기사를 보면서 Visual Studio Code를 사용해 우리 유튜브 채널에서 함께 따라할 수 있습니다. 유튜브 채널도 확인해 주세요.