원시 타입(Primitive type) vs 참조 타입(Reference type)

Verba volant, scripta manent·2021년 8월 21일
0

JS면접뽀시기

목록 보기
5/10

자바스크립트의 데이터 타입은 크게 두가지로 분류된다.

원시 타입과 참조 타입

원시 타입(Primitive type)

종류

Number, String, Boolean, null, undefined, Symbol(ES6에서 추가됨)

특징

  1. 변수가 할당될 때 메모리의 고정 크기로 값을 저장하고 해당 주소를 직접 참조
  2. 불변성(immutability) : 변수 값에 대한 수정이 일어나더라도 메모리 값이 변경되는게 아닌 새로운 메모리를 할당받는 성질
    ex)
let a = 'abc';
a = a + 'def'; // 기존의 'abc가 'abcdef'로 바뀌는게 아니다.
// 새로운 문자열 'abcedf'를 만들어 그 주소를 변수 a에 저장하는것

console.log(a); // 'abcdef'

let b = 5;
let c = 7;
b = 7; // 기존에 저장했던 7을 찾아서 있으면 재활용하고, 없으면 새로 만들어 b에 저장.
// 즉, 기존에 저장된 5 자체를 7로 바꾸는게 아니다.

console.log(b); // 7
console.log(c); // 7

참조 타입(Reference type)

종류

Object, Array, Function, Date, RegExp, Map, WeakMap, Set, WeakSet(ES6에서 추가됨)

특징

  1. 변수가 할당될 때 값이 할당된 메모리의 주소를 참조한다.
  2. 가변성(mutability) : 불변성의 반대되는 개념으로, 변수 값에 대한 수정이 일어나면 메모리 값이 변경되는 성질
    ex)
let a = [1,2,3,4,5];
let b = a; // 변수 a와 b는 같은 메모리 주소를 참조한다.
b[4] = 6; // b의 4번째 인덱스 값은 6이라고 재할당
// 배열의 값이 변경되면 b를 수정하면 a가 참조하는 값의 내용도 변경된다.

console.log(b); // [ 1, 2, 3, 4, 6 ]
console.log(a); // [ 1, 2, 3, 4, 6 ]

결론

  1. 원시 타입은 값이 할당된 해당 주소를 직접 참조하며 불변성이다.
  2. 참조 타입은 값이 할당된 메모리의 주소를 참조하며 가변성이다.
profile
말은 사라지지만 기록은 남는다

0개의 댓글