type과 wrapper 객체

devAnderson·2021년 12월 30일
0

TIL

목록 보기
14/103

사전지식

  • 자바스크립트엔 타입이 존재한다.
  • 자바스크립트에 타입이 존재해야 하는 이유는 크게 3가지가 있다
    1. 식별자에 할당하는 값, 즉 메모리에 저장해야 하는 값이 어느정도 크기여야하는지에 따라 메모리 공간 크기를 결정하기 때문이다 (저장성)
    2. 메모리에 저장된 값을 불러들일 때 어느정도만큼 나누어 가져와야 하는지를 결정하기 위해서다 (참조성)
    3. 나눠서 가져온 2진수 데이터를 어떤 형식으로 결합해야 하는지를 정하기 위해서이다. (해석성)
  • 자바스크립트의 타입결정은 크게 명시적 전환(타입 캐스팅) 과, 암묵적 전환(타입 코이렉션)으로 나뉜다.
let str = "x".toString() // 명시적
let num1 = 2 // 암묵적
let num2 = 1 + "" // 암묵적 ( 원시값이므로 값이 변경된 것이 아닌 표현식에 따라 새로운 메모리 공간에 데이터가 저장됨)

wrapper 객체?

  • 여기서 분명히 "x"는 원시타입인 string이다.
  • string은 객체가 아님에도 불구하고 "x".toString() 이 가능한 이유는 내부에서 암묵적으로 wrapper객체를 형성하기 때문이다.
  • 이 wrapper 객체의 근원은 표준 빌트인 생성자 함수로부터 나온다 (Number,String,Boolean... 등)
  • "x"에 대해서 메서드가 필요해질 경우, 우선 wapper 객체를 생성하면서 value로 주어진 값을 저장한다
  • 그 이후 필요한 메서드를 호출하여 실행시켜 결과물을 리턴한 뒤 wapper객체는 garbage collector에 의해 수거된다

참고로 toString은 모든 레퍼 객체에서 확인이 가능하다
확인이 가능한 이유는 toString의 근원 출처가 Object.prototype으로부터 오기 때문이다.
즉, wrapper 객체가 만들어지는 순간, 이것이 객체인 이상 무조건 프로토타입 체인에 의해서 근원을 거슬러 올라가면 그 끝에는 Object.prototype이 존재하게된다.
따라서 모든 wrapper객체에는 toString이 존재하게 되는 것이다. ( 물론 제시된 타입에 따라 작동하여 도출되는 결과물은 달라진다 )

profile
자라나라 프론트엔드 개발새싹!

0개의 댓글