JavaScript

데이터 타입

원시 데이터 타입

이제 데이터 타입에 대해서 조금 더 심도 있는 이야기를 할 수 있게 되었다. 데이터 타입이란 데이터의 형태를 의미한다. 데이터 타입은 크게 두가지로 구분할 수 있다. 객체와 객체가 아닌 것. 그럼 객체가 아닌 것은 무엇일까?

  • 숫자
  • 문자열
  • 불리언(true/false)
  • null
  • undefined

객체가 아닌 데이터 타입을 원시 데이터 타입(primitive type)이라고 한다. 그 외의 모든 데이터 타입들은 객체다. 

레퍼 객체

아래 코드를 보자.

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)다.

레퍼객체로는 String, Number, Boolean이 있다. null과 undefined는 레퍼 객체가 존재하지 않는다.

댓글

댓글 본문
  1. 진진리
    22.05.13
  2. 낀찐
    2022. 02. 06 완료
  3. pmxsg
    2021.12.18 수강
  4. 드림보이
    2021.12.12. 데이터 타입 파트 수강완료
  5. GelandeWagen
    ok
  6. Grit
    감사합니다.
  7. seaWater
    2021. 9. 29. 완료
  8. choi
    완료
  9. labis98
    20210822 good!!!
  10. 낭만고양이
    수강완료
  11. Amousk
    좋은 강의 감사합니다.
  12. hanel_
    21.3.13
  13. 원시 데이터타입: 숫자/문자열/불리언(true/false)/null/undefined
    객체(참조) 데이터타입: 나머지
    'str.lenght'와 같이, 원시 데이터를 객체 데이터로 활용할 경우 잠시동안 자바스크립트가 객체로 만들고 사용이 끝나면 제거해 다시 원시 데이터만 남는다. 이때 사용하는 객체가 '레퍼객체'이다.
  14. 강승
    감사합니다.
  15. 박병진
    감사합니다.2020.11.02
  16. ironia
    수고하셨습니다~
  17. 한강
    오늘도 감사합니다.~^^!
    200409
  18. 준바이
    MDN 서칭해봤는데
    String의 Property 중 하나가 length
    Method 중 하나가 charAt 이네요 ~
    대화보기
    • 굼벵이
      완료
    • 홍주호
      20191103 완료
    • 박창신
      완료
    • shouts
      제 생각엔 .length 나 .charAt 메소드는 빌트인 오브젝트인 String의 메소드여서 그런 것 같습니다.
      대화보기
      • 빵승
        질문 있습니다!
        str.prop 관련 얘기하실때
        래파객체가 만들어지고 원시타입을 리턴하고 사라지기 때문에 결과적으로 prop 프로퍼티를 불러올 수 없다고 하셨는데
        그럼 str.length나 str.chatAt메소드는 어떻게 존재할 수 있는 것인가요?
      • 호두
        고맙습니다.
      • choon
        감사합니다.
      • Mario
        강의 너무 감사합니다!
        처음에 이해가 안되던 것 들이, 나중가서야 퍼즐조각처럼 끼워지는 느낌이네요!
      • 미완성
        20190109
      • 스탐
        감사합니다.
      • moon
        감사합니다.
      • 김진홍
        감사합니다!
      • Jupi
        만약, 어떤문자열이나 숫자를 선언하고,
        그 문자나 숫자에 length와 같은 메소드를 적용시킬때,
        원래 문자와 숫자는 원시데이터 타입이라 그 안에는 아무런 메소드들이 포함되어 있지 않다.

        그러나, javascript는 문자와 숫자같은 원시데이터타입에
        특정된 메소드를 적용시키고 싶을때,
        레퍼객체(wrapper object)를 임시로 만들어서 그안에 속하는 메소드들을 사용가능하게 한다.

        이러한 특성들이 또한 객체지향의 일부분으로 볼 수 있다.
      • 박인호
        12-20
        수강완료.
      • GoldPenguin
        완료했습니다.
      • 송성태
        선생님 덕분에 많은 것을 깨닫고 있습니다.
        JavaScript가 왜 객체지향 언어인지 이해가 됩니다.
        JavaScript가 원하는 양식대로 객체를 만드는 일이 가장 중요하기 때문이군요.
        정말 감사합니다. 선생님.
      • Qjsdur Qkf
        무슨 말인지 몰라도 그냥 듣고 있습니다!
        반복하고 또 반복하다보면 알게 되겠죠??

        그렇게 많아 보이던 강의가 이제 얼마 안남았네요!
        모두 화이팅!!
      • Seo Yun Seok Tudoistube
        자바스크립트 강의는 끝날때까지 쉽지가 않아서 방심할 수가 없군요. 감사합니다^_____^!!!
      • crable@naver.com
        감사합니다
      • BANIP
        이전강의까지는 모르는것 투성이였는데 이제서야 내리막길에 접어든 기분이네요
        언제나 좋은 강의 감사합니다~
      • 신입1
        감사합니다
      • 굿
      • 폭스킴
        이 챕터의 키값은 wrapper object
      • park
        문자열과 숫자열, 그리고 참/거짓 에 대해서는 자바스크립트가 이것들을 처리할 수 있는 기능들을 제공하기 위해
        객체처럼 취급한다는 것이군요
      • 완료!
        완료! 감사합니다~
      • 취준생1
        자바에서 레퍼클래스와 비슷한 개념이군요 자동으로 만들어준다는게 특이합니다
      • yihsang
        "문자열은 문자열과 관련된 메소드등을 호출할 때 임시로 객체를 만들어준다"
        감사합니다.
      • 이주환
        2016.04.26
        잘보고 갑니다.
      • JustStudy
        고맙습니다
      • terminater
        언어를 공부하는데는 애로가 있으나 실제 코딩에서의 편리함이 있겠군요?!
        대화보기
        • Soori
          저는 잘은 모르지만.. 자바스크립트 말고 다른 언어를 공부하다 보면 실제 String의 경우 charator('A', 'B' 등의 문자)와 integer(숫자)들과는 다르게 객체로 정의하기도 해요. 그게 정석이구요. 근데 코딩을 하다 보면 엄청 귀찮을 때가 많아요... 그래서 '그냥 다 같이 원시로 정의하면 안 되는 거야?'라고 불평해요. 그래서 저는 자바스크립트에서 var선언과 string과 char를 구분하지 않는게 너무나 편하게 느껴져요. 실제 파이썬 같은 후에 나온 프로그래밍 언어들을 보면 char 선언이 없어지고 죄다 string 취급을 하고 실제 string을 살펴보면 array나 다를 바 없는 걸 알 수 있어요. 그게 편하기도 하구요.. 저는 프로그래밍 언어의 진화된 경향성이라고 생각을 해요. 그게 더 편하니깐... 내부적으로는 처리할게 많지만...
          대화보기
          • 쩡아에요
            좋은 강좌 정말 감사합니다. 자바스크립트를 이해하는데 많은 도움이 됐어요 ㅎ
            강좌를 보다 궁금한점이 생겼는데요. 원시 데이터로 변수를 만들어서 자주 객체 함수를 사용 한다면,
            객체가 만들어졌다 없어졌다를 반복 하게 되서 성능에 문제가 생길수도 있는건가요 ??

            예를 들어
            var name = 'opentutorials';
            name.length; name.charAt(0); ...........
            이런식으로 계속 해서 String 객체의 함수를 사용하게 된다면

            var name = new String('opentutorials');
            이렇게 객체로 아예 생성해서 사용하는게 효율적인건가 궁금해요.
          버전 관리
          egoing
          현재 버전
          선택 버전
          graphittie 자세히 보기