JavaScript 기본 | 값 | 래퍼 객체

Faithful Dev·2025년 5월 20일
0

프리스쿨

목록 보기
24/25

래퍼 객체란?

자바스크립트에서 문자열, 숫자, 불리언 같은 원시 값(primitive value)도 객체처럼 메서드나 속성을 사용할 수 있는데,
그게 가능한 이유는 자바스크립트 엔진이 일시적으로 원시 값을 래퍼 객체로 변환하기 때문이다.
이때 생성되는 객체가 바로 래퍼 객체이다.


작동 방식: "박싱(Boxing)"과 "언박싱(Unboxing)"

예시:

let str = "hello";
console.log(str.toUpperCase()); // "HELLO"
이 코드의 실제 내부 흐름:
  1. str.toUpperCase()를 호출하면,
  2. JS 엔진이 "hello"new String("hello")자동 박싱
  3. 해당 래퍼 객체의 메서드 .toUpperCase()가 호출됨
  4. 결과 반환 후, 래퍼 객체는 즉시 폐기됨 (가비지 컬렉션 대상)

자바스크립트의 3가지 기본 래퍼 객체

원시 타입래퍼 객체생성 예시
stringString 객체new String("abc")
numberNumber 객체new Number(42)
booleanBoolean 객체new Boolean(true)

이들은 전역 객체이며, 직접 인스턴스를 만들 수도 있다.
하지만, 직접 생성은 권장되지 않는다.


잘못된 예시: (권장 X)

let x = new String("hello");
console.log(typeof x); // "object" ← 이제 더 이상 원시 타입 아님!

이렇게 만들면 비교 연산이나 타입 체크에서 예상치 못한 결과가 발생할 수 있다.

let a = "hello";
let b = new String("hello");

console.log(a === b); // false ← 타입 다름

일반적으로는 자동 변환만 믿고 쓰자

원시 값이 메서드나 속성을 호출하면 엔진이 자동으로 래퍼 객체를 생성해서 처리하므로, 개발자가 명시적으로 래퍼 객체를 생성할 일은 거의 없다.

console.log("abc".length); // 3 ← 자동으로 String 객체로 래핑됨

Java와 비교

항목JavaJavaScript
원시 vs. 래퍼 타입intInteger, booleanBooleannumberNumber, stringString
박싱명시적 or 자동 (autoboxing)자동 (메서드 호출 시 래퍼 객체 생성)
지속성명시적으로 생성되면 계속 존재JS에선 래핑 객체는 일시적이고 즉시 제거됨
비교==는 값 비교, ===는 참조 비교JS에선 ===가 타입까지 비교

요약

항목설명
정의원시 타입 값을 일시적으로 객체처럼 다루기 위한 내부 처리
작동 방식메서드 호출 시 자동으로 래퍼 객체 생성 후 폐기
예시 클래스String, Number, Boolean
주의사항new String(), new Number() 직접 생성은 피해야 함
개발자 행동대부분 경우, 자동 박싱에 의존하면 충분
profile
Turning Vision into Reality.

0개의 댓글