자바스크립트의 래퍼 객체
이 기사는 자바스크립트에서 래퍼 객체에 대해 설명합니다.
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를 사용해 우리 유튜브 채널에서 함께 따라할 수 있습니다. 유튜브 채널도 확인해 주세요.