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. 코딩박
    2023.11.16. JavaScript 입문 수업 - 객체지향 - 데이터 타입 파트 수강했습니다.
  2. DreamBoy
    2023.10.17. JavaScript 입문 수업 - 객체지향 - 데이터 타입 파트 수강했습니다.
  3. 늦은개발자
    23.07.30 완료. 데이터 타입은 크게 두가지로 구분할 수 있다. 객체와 객체가 아닌 것
  4. 진진리
    22.05.13
  5. 낀찐
    2022. 02. 06 완료
  6. pmxsg
    2021.12.18 수강
  7. 드림보이
    2021.12.12. 데이터 타입 파트 수강완료
  8. GelandeWagen
    ok
  9. Grit
    감사합니다.
  10. seaWater
    2021. 9. 29. 완료
  11. choi
    완료
  12. labis98
    20210822 good!!!
  13. 낭만고양이
    수강완료
  14. Amousk
    좋은 강의 감사합니다.
  15. hanel_
    21.3.13
  16. 원시 데이터타입: 숫자/문자열/불리언(true/false)/null/undefined
    객체(참조) 데이터타입: 나머지
    'str.lenght'와 같이, 원시 데이터를 객체 데이터로 활용할 경우 잠시동안 자바스크립트가 객체로 만들고 사용이 끝나면 제거해 다시 원시 데이터만 남는다. 이때 사용하는 객체가 '레퍼객체'이다.
  17. 강승
    감사합니다.
  18. 박병진
    감사합니다.2020.11.02
  19. ironia
    수고하셨습니다~
  20. 한강
    오늘도 감사합니다.~^^!
    200409
  21. 준바이
    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
        고맙습니다