티스토리 뷰

데이터 타입은 크게 2가지로 구분할 수 있다. 

  • 원시 데이터 타입(or 기본 데이터 타입, primitive type) - 객체가 아닌 데이터 타입
    • 숫자
    • 문자열
    • 불리언(true/false)
    • null
    • undefined
  • 객체 데이터 타입 (참조 데이터 타입) -원시 데이터 타입 외의 모든 데이터타입은 객체입니다. 

래퍼 객체(wrapper object)

-원시데이터가 있을 때 객체처럼 활용할 수 있도록 감싸주는 객체를 wrapper object 라고 합니다. -> 이 작업을 JS가 자동으로 처리해 줍니다

-원시 데이터는 객체가 아니기 때문에 객체처럼 사용할 수 없습니다. 하지만 wrapper object를 통해서 마치 객체인 것처럼 사용할 수 있게 됩니다. 

 

▶원시데이터 타입 별 래퍼 객체 유/

  • 숫자 -> Number (wrapper 객체를 말하는 것)
  • 문자열 -> String (wrapper 객체를 말하는 것)
  • 불리언(true/false) -> Boolean (wrapper 객체를 말하는 것)
  • null ->X  
    • e.g.)  null.prop = "nothing"; // type error
  • undefined ->X , null과 마찬가지
// 원시타입을 넣은 str 변수
      const str = "coding";
      document.write(str.length, "<br/>");
      //String.prototype.charAt(index); index순서에 있는 문자열을 반환
      document.write(str.charAt(0), "<br/>"); //output: c

      const str1 = "coding";
      //객체처럼 prop 속성에 everybody 값 넣기
      str1.prop = "everybody";
      //str1.prop를 하는 순간 자바스크립트는 내부적으로 String 객체가 만들어진다.
      // prop 프로퍼티는 이 객체에 저장되고 객체는 곧 제거 된다.
      //그렇기 때문에 prop라는 속성이 저장된 객체는 존재하지 않게 된다.
      document.write(str1.prop, "<br/>"); //output: undefined
  • 위의 코드에서 문자열은 분명히 프로퍼티와 메소드가 있다. 그렇다면 객체와 왜 다른 것일까?
  • 그 이유는 내부적으로 문자열이 원시 데이터 타입이고 문자열과 관련된 어떤 작업을 하려고 할 때 자바스크립트는 임시로 문자열 객체를 만들고 사용이 끝나면 제거하기 때문이다. 
  • 그렇기 때문에 str1.prop = "everybody"; 라는 값이 String이라는 wrapper 객체 담아지지만 그 작업이 끝나면 객체를 소멸시키기 때문이다. 이러한 특징은 일반적인 객체의 동작 방법과는 다르다.(wrapper객체의 특징)  ->원래 원시데이터를 담은 변수로 원상복귀되기 때문에 str1.prop 를 호출했을 때 undefined 라는 결과를 얻게된다. 
  • 그럼에도 문자열과 관련해서 필요한 기능성을 객체지향적으로 제공해야하는 필요성때문에 원시 데이터형을 객체처럼 다룰 수 있도록 하기 위한 객체를 자바스크립트는 제공하고 있는 것이며 이를 wrapper object라고 부른다.  

 

 

 

 

댓글