원시 타입 / 참조 타입 / 원시 래퍼 타입

Geonil Jang·2021년 7월 27일
0

code-js

목록 보기
1/7
post-thumbnail

원시 타입이란?

있는 그대로 저장되는 데이터를 표현합니다.

const value = 100;
console.log(value);
  • 불리언: true, flase
  • 숫자: 1, 2, 3 ...
  • 문자열: "Hello JS"
  • null
  • undefined

원시 타입의 특징

원시값을 변수에 할당하면 값이 복사되어 들어갑니다. 즉, 원시값이 하당된 변수들을 모두 자기 자신만의 고유한 값을 가지게 됩니다.

let one = 1;
let two = 2;
one = two; // 2
one = 3; // 3
console.log(two) // 2
console.log(one) // 3

typeof

원시값의 종류를 알 수 있게 해주는 매서드입니다.
null의 타입에 주의필요!

console.log(typeof 1) // "number"
console.log(typeof "hello") // "string"
console.log(typeof true) // "boolean"
console.log(typeof null) // "object" -> value === null
console.log(typeof undefined) // "undefined"

참조 타입이란?

  • 객체: {}
  • 배열: []
  • 힘수: function
  • Date
  • RegExp
    * 원시 타입 뺴고 전부 참조 타입으로 봐도 좋습니다. *

참조 타입의 특징

참조 타입은 변수에 값을 직접 저장하지 않습니다.
변수에 저장되는 것은 메모리 안에서 객체의 위치를 가리키는 "포인터"입니다.
무엇이 저장되느냐, 이것이 원시 타입과 참조 타입의 가장 큰 차이입니다.

let objOne = {one:1}
let objTwo = {two:2}
objTwo = objOne // 메모리의 같은 주소를 바라보게 되었다. 값이 변경되면 메모리가 바라보고 있는 객체가 변경된 것이기 때문에 값이 같이 변경되는 것이다.
objTwo.one = 100;
console.log(objOne) // {one:100}
console.log(objTwo) // {one:100}

하지만 신기하게도 원시 타입도 마치 참조 타입처럼 사용할 수 있습니다.

왜일 까요?

let str = "hello world";
console.log(str.length) // 11 문자열의 갯 수 -> 원래 래퍼 타입 메소드 ex) .length

원시 래퍼 타입이란?

원시 타입을 객체처럼 편리하게 사용하도록 도와줍니다.

  • String
  • Number
  • Boolean

원시 래퍼 타입의 특징

원시 타입을 객체처럼 사용하는 순간, 자바스크립트 내부에서 사용하는 데이터의 인스턴스를 만들게 됩니다. 이렇게 만들어진 객체는 코드를 실행 후 바로 다음 줄에서 파괴됩니다.
이러한 과정을 오토박싱(autoboxing) 이라고 합니다.

//ex1
let name = "bit"
console.log(name.concat(" coin")); // "bit coin"

let name = "bit";
let temp = new String(name); // 임시변수의 메서드를 만들어준다
console.log(temp.concat("coin")); // 실행 후!
temp = null // 메모리 해제

//ex2
let name = "bit";
name.coin = "coin";
console.log(name.coin); // undefined

let name = "bit";
let temp = new String(name);
temp.coin = "coin";
temp = null; // 파괴되었어다.
let temp = new String(name); // 다시 생성
console.log(temp.coin); // undefined 

정리

  • 원시 타입은 문자열, 숫자, 불리언, null, undefined가 있습니다.
  • 참조 타입은 원시타입을 제외한 나머지 데이터 타입입니다.
  • 원시 타입과 참조 타입의 가장 큰 차이는, 원시 타입은 값이, 참조 타입은 데이터의 주소가 저당된다는 것 입니다.
  • 원시 래퍼 타입은 String, Number, Boolean입니다.
  • 원시 래퍼 타입은 원시 타입을 객체 처럼 사용할 수 있도록 합니다.
profile
takeaways

0개의 댓글