ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [javaScript] 래퍼객체(Wrapper object)
    JavaScript 2021. 8. 12. 01:36

    래퍼객체 (Wrapper object)

     

    1. 원시 타입과 래퍼객체

    자바스크립트에는 총 6가지의 원시 타입이 있습니다.

    string, number, boolean, null, undefined, symbol

    또한 이 원시타입에 대응하는 래퍼객체 4가지가 존재합니다.

    String, Number, Boolean, Symbol

    래퍼라는 이름에서 알 수 있듯이, 래퍼객체는 원시타입을 감싸는 형태로 사용됩니다.

    "hello".toUpperCase(); // result : HELLO

    위 코드를 보면 hello 는 원시타입인 string 자료형임에도 불구하고 toUpperCase() 라는 메소드를 가지고 있음을 알 수 있습니다. 

    어떻게 이게 가능한걸까요?

     

    프로그램이 문자열 hello 의 프로퍼티를 참조하려고 하면, javaScript 는 new String("hello") 를 호출한 것처럼 string 자료형을 임시적으로 래퍼객체로 변환하기 때문입니다. 

    이렇게 생성된 임시 래퍼객체는 참조가 끝나면 사라지게 되는데, 아래 코드를 통해 확인 할 수 있습니다. 

    let a = 'hello';
    a.someProperty = 100; // new String(a).someProperty = 100;
    console.log(a.someProperty) // undefined

    a 라는 string 타입 변수에 속성값으로 someProperty 라는 값에 100을 대입했지만, 다시 꺼냈을 때 출력되는건 undefined 이며, 래퍼 객체가 소멸했음을 알 수 있습니다. 

     

    결국 실제로는 원시값에 프로퍼티를 설정할 수 없다는 건데 (엄밀히 말하자면 설정 자체는 가능하지만, 이내 사라져버리므로 설정의 의미가 없음), 이런 동작을 이해하는 것은 자바스크립트를 한 층 더 깊숙히 알게해줍니다.

     

    2.  원시타입과 객체의 차이점

    var s1 = "hello";
    var s2 = new String("hello");
    var s3 = new String("hello");
     
    typeof s1;    // "string"
    typeof s2;    // "object"
     
    s1 == s2;    // false
    s2 == s3;    // false

    위 코드에서 알 수 있듯이, 원시타입의 문자열인 s1 과 다르게 s2, s3 은 객체입니다.

    그렇기 때문에 원시타입 string 과 객체 string 은 동일하지 않습니다.

     

    하지만 같은 string 객체라도 동일하지 않을 수 있는데, String 객체는 개별 객체이기 때문에 오로지 자기자신과만 동일합니다. 

    'JavaScript' 카테고리의 다른 글

    나의 성장 그림 Front(12.24)  (0) 2021.12.24
    나의 성장 그림 Front(12.23)  (0) 2021.12.23
    정규표현식  (0) 2021.12.16
    [JavaScript] prevState 가 뭔가요?  (0) 2021.09.21
    [javaScript] package.json 에 대해서 알아보자.  (0) 2021.08.21
Designed by Tistory.