-
[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