원시값

  • string
  • number
  • bigint
  • boolean
  • symbol
  • null
  • undefined

총 7가지의 원시형 데이터가 있다.

자바스크립트에는 날짜 , 오류 , 등등을 다룰 수 있게 해주는 다양한
내장 객체를 제공한다. 이 객체들은 고유한 property와 메서드를 가지고있다.

객체는 원시값보다 무겁고, 내부 구조를 유지하기 위해 추가 자원을 사용하기 때문에,
내장객체(기능)를 많이 사용하면 시스템 자원이 많이 소모 되는 단점이 있다.

원시값을 객체처럼 사용하기

원시값을 사용할땐 가능한 성능이 빠르고 사이즈가 가벼워야 한다.
그런데, 메서드를 쓰는순간 성능이 느려지고, 사이즈가 무거워지게 된다.

이러한 문제를 해결하기 위해 "원시 래퍼 객체" 라는걸 활용한다.

원시 래퍼 객체는 무엇인가?

문자열이나 숫자와 같은 원시형 데이터를 내장객체를 효율적으로 쓰게
해주는 도구 같은거라고 생각하면 될 것 같다.

원시 래퍼 객체가 만들어지는 과정

  1. 원시형 데이터의 기존 값은 유지한 채

  2. 원시형 데이터의 메서드와 프로퍼티에 접근할 수 있도록 언어 차원에서 허용

  3. 이를 가능하게 하기 위해, 원시값이 메서드나 프로퍼티에 접근하려하면 추가 기능을
    제공해주는 특수한 객체, "원시 래퍼 객체(object wrapper)"를 만들어준다. 이 객체는 작업이 끝나면 삭제된다.

문자열의 모든 글자를 대문자로 만드는 메서드를 예로 들어보자

  1. 문자열 str은 원시값의 프로퍼티 toUpperCase에 접근하는 순간
    특별한 객체가 만들어진다. 이 객체는 str의 문자열을 알고 있고, toUpperCase와
    같은 유용한 메서드를 가지고 있음.

  2. 특별한 객체에 있는 메서드가 실행되고, 새로운 문자열이 반환이 된다.
    alert에 새로운 문자열이 보일것임

  3. 특별한 객체는 파괴되고, 원시값 str만 남는다.

이러한 내부 프로세스를 통해 원시값을 가볍게 유지하면서 메서드를 호출할 수 있게
되는것이다.

String / Number / Boolean을 생성자로 쓰지말자

몇몇 언어에선 new Number(1) 또는 new Boolean(false)와 같은
문법을 사용해 원하는 타입의 "래퍼 객체"를 직접 만들 수 있다.

자바스크립트에서도 하위 호환성을 위해 이 기능을 남겨 두었는데, 이런식으로
래퍼 객체를 만드는건 좋지 않다.

래퍼 객체를 생성자로 만들었을때 혼동이 올 수있는 예시

profile
Hello~~👋

0개의 댓글