ABOUT ME

-

Today
-
Total
-
  • [생활코딩] JavaScript 데이터 타입
    Study/JavaScript 2019. 12. 9. 10:19
    반응형

     

     

    데이터 타입 Data type

     

    데이터 타입이란 데이터의 형태를 의미한다. 데이터 타입은 크게 두가지로 구분할 수 있다. 객체와 객체가 아닌 것.
    객체가 아닌 데이터 타입을 원시 데이터 타입(primitive type)이라고 한다. 그 외의 모든 데이터 타입들은 객체다. 

    ◆ 원시 데이터 타입(primitive type) : 숫자, 문자열, boolean(true/false), null, undefined

    객체 뒤에 등장하는 점 . : object access operator

    var str = 'coding'; 
    console.log(str.length);        // 6 
    console.log(str.charAt(0));     // "C" 


    위와 같이 문자열은 분명히 프로퍼티와 메소드가 있다. 하지만 문자열은 객체가 아니다. 

    왜냐하면 내부적으로 문자열이 원시 데이터 타입이지만 문자열과 관련된 어떤 작업을 하려고 할 때,

    자바스크립트는 임시로 '문자열 객체'를 만들고 사용이 끝나면 제거하기 때문이다. 이러한 처리는 내부적으로 일어난다. 

    var str = 'coding'; 
    str.prop = 'everybody'; 
    console.log(str.prop);      // undefined 
    


    str.prop를 하는 순간에 자바스크립트 내부적으로 String 객체가 만들어진다. 

    prop 프로퍼티는 이 객체에 저장되고 이 객체는 곧 제거 된다. 

    그렇기 때문에 prop라는 속성이 저장된 객체는 존재하지 않게된다.

    하지만 문자열과 관련해서 필요한 기능성을 객체지향적으로 제공해야 하는 필요 또한 있기 때문에 

    원시 데이터 형을 객체처럼 다룰 수 있도록 하기 위한 객체를 자바스크립트는 제공하고 있는데 

    그것이 레퍼객체(wrapper object)다.


     레퍼객체(wrapper object) :  String, Number, Boolean

     

    예시) String.prototype.substring()

    // str.substring(indexStart[, indexEnd])
    
    let str = 'Mozilla';
    
    console.log(str.substring(1, 3));
    // expected output: "oz"

     

     

    원시 데이터 타입과 객체


    var a = 1; 을 해석하자면,
    1이라는 숫자(원시 데이터 타입)을 생성하여, 변수 a에 대입한다.
    또한,
    var a = {'id' : 1};을 해석하면,
    id가 1이라는 객체를 생성하여, 변수 a에 대입한다.

    그리고, 변수에 변수를 대입할경우,
    var b = a; 를 해석하자면,

    ## a가 원시데이터타입을 가지고 있을때
    변수 a가 가지고 있는 숫자나 문자 불리언을 복사 해서 변수 b에 대입한다.

    ## a가 객체를 가지고 있을때
    변수 a에 대입되어 있는 객체에 변수 b도 링크(참조)한다.
    즉, 변수 a와 변수 b는 같은 객체를 바라본다.
    그리고 만약에 b = {'id' : 2} 라고 새로운 객체를 대입할 경우
    a와 b는 서로 다른 객체를 바라보는 것이기 때문에 a는 변하지 않는다.

    정리하면 변수에 담겨있는 데이터가 원시형이면 그 안에는 실제 데이터가 들어있고, 객체면 변수 안에는 데이터에 대한 참조 방법이 들어있다고 할 수 있다.

    반응형

    댓글