자바스크립트의 래퍼 객체

자바스크립트의 래퍼 객체

이 기사는 자바스크립트에서 래퍼 객체에 대해 설명합니다.

YouTube Video

래퍼 객체

JavaScript는 기본 타입과 이를 다루기 위한 객체(래퍼 객체)를 가지고 있습니다.

기본 타입

원시 타입은 단일 값을 나타내며 간단하고 가볍습니다. 이것들은 불변(변경 불가)이며 객체 메서드나 속성을 직접적으로 가지지 않지만, 연산을 위해 임시로 래퍼 객체로 변환될 수 있습니다.

stringnumber는 원시 타입의 예입니다. 반면에, 래퍼 객체는 StringNumber처럼 대문자로 시작합니다.

래퍼 객체

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를 사용해 우리 유튜브 채널에서 함께 따라할 수 있습니다. 유튜브 채널도 확인해 주세요.

YouTube Video