Javascript 데이터 타입

Nine·2022년 2월 24일
0

Javascript

목록 보기
4/16
post-thumbnail

💪출처


💪JS Data Type

JS 데이터 타입은 기본형과 참조형이 있어요.


💪Primitive Type

  • 변경 불가능한 값이예요.

엥, 변수 값 재할당 되고 변경 되던데요❓❓

let a = 10;

a = 20; // 되잖아!?
  • 그래요, 변수는 재할당되죠~

  • 하지만 값 자체는 변경이 불가능해요. 무슨 말이냐구요?

두 변수가 값에 의한 전달이 일어날 경우를 생각해보면

let a = 10;

let b = a;

a = 20;
  • a가 변한다고 b가 변하나요? 그럴리가

  • 두 변수의 원시 값은 서로 다른 메모리 공간에 저장된 별개의 값이 되어 어느 한쪽에서 값을 변경하더라도 서로 간섭할 수 없습니다.

  • 이를 불변성(immutable)한 상태를 가진다고 하는 것입니다.


💪Reference Type

  • 객체는 property 개수가 정해져 있지 않죠?

  • 따라서 property가 동적으로 추가, 삭제됩니다.

  • 확보해야할 메모리 공간의 크기를 미리 정할 수가 없어요.

  • 그래서 객체를 생성하고 property에 접근하는 것도 원시 값과 비교하면 비용이 많이 드는 일입니다.😂😂

  • 객체는 원시값과는 다른 방식으로 동작하게 됩니다.

객체는 변경 가능한 값(mutable value)으로 설계되었습니다. 메모리에 저장된 객체를 직접 수정할 수 있습니다.


😀이렇게 객체가 해서 얻는 이점이 뭔데요?

  • 메모리 사용의 효율성과 성능을 위해 어느 정도의 구조적인 단점을 감안한 설계라고 할 수 있겠습니다.

😖그럼 그 단점이 뭘까요?

  • 여러 개의 식별자가 하나의 객체를 공유할 수 있다는 것입니다.

  • 예를 들어볼까요??

var x = { count : 100 };
var y = x;

x.count = 99; // x를 바꿨는데

console.log(y);	// 99 
// y도 바뀌어요!
var list1 = [1, 2, 3];	// 메모리 주소 : 1234a
var list2 = [1, 2, 3];	// 메모리 주소 : 2345b

var isSame = list1 === list2;	// 1234a 와 2345b 를 비교해요!

console.log(isSame);	// false
var list3 = [1, 2, 3];
var list4 = list3; // list4가 list3와 같은 주소를 참조하겠죠?

var isSame = list3 === list4; 

console.log(isSame);	// true
  • 따라서 원본 또는 사본 중 어느 한쪽에서 객체를 변경하면 서로 영향을 주고 받게 됩니다.

  • 다양한 방법을 통해 이런 실수를 하지 않도록 신경 써줘야 겠습니다...

profile
함께 웃어야 행복한 개발자 장호영입니다😃

0개의 댓글