intro
primitive type : 원시 타입
reference type : 주소 타입
stack 이라는 사물함이있다.
let a;
변수선언하면
이제 이 사물함에 이름표는 a가된다.
a = 1
사물함을보고 a를 찾아서 값을 넣어준다.
a
사물함을 보면 1이 보인다.
b,c... 모두 사물함을 줄수 있다.
let b = 2; let c = 3;
number , boolean , string , null, undefined 가 여기에 들어갈수있다.
stack이라고 불리던 사물함의 절반을 날려주고 그곳을 heap이라고 부른다.
사물함에 주소가 들어간다. 그리고 마찬가지로 위쪽 사물함엔 주소가 들어가고
공간이 생긴 heap영역에는 실제값이 줄줄이 연결되어서 저장된다.
그래서 각 값들은 삭제하고 추가하고 할때 덜 신경써도되게된다. (주소값만으로 해결가능)
배열,객체,함수 가 참조타입 데이터이다.
무엇이 다른가.
원시타입은 대입 연산을 했을때.
값을 복사해준다.
let a =1;
let b;
a = b;
b= 2;
a // 1;
기존의 값에 영향을 주지않는다.
하지만 참조 데이터는
주소를 주는것이다.
let e = [10,20];
let f = e;
f[0] = 50;
e; // [50,20]
그러므로 기존의 데이터에도 영향을 끼치다.
자바스크립트에서 원시타입은 객체가아니면서 method를 가지지않는 6가지가 있다.
string,number,bigint,boolean,undefined,symbol,(null)
왜 원시 인가 ?
원시 자료형은 모두 "하나"의 정보(데이터)를 담고있다.
옛날에는 코드가 그런식으로밖에 작성할수없으므로 "원시적인" 이라고 생각할수있다.
원시 자료형은 값 자체에 대한 변경이 불가능(immutable)하지만, 변수에 다른 데이터를 할당할 수는 있다.
결국 자바스크립트에서는 원시or참조 인것이다. 배열[]
객체{}
함수function(){}
이 대표적이다.
컴퓨터가 처음 사용되던 시절에 배열,즉 리스트라는 개념을 구현하기 어려웠엇는데
띄어쓰기,탭,쉼표 등으로 구분했엇다.
이흔적은 csv(conmma-separated values)에서도 찾아볼 수 있다.
자료구조를 어느정도 공부해보았다면
실제로 리스트에서 push,pop,indexOf 와 같은매서드가 얼마나 구현하기 귀찮은일인지 알게된다.
(C자료구조, C++자료구조해보면 어우..큐,스택을 통째로 배워야한다, 링크드리스트도 마찬가지)
레퍼런스, 우리는보통 참고자료 찾을때 레퍼런스찾는다고 이야기한다.
컴퓨터공학에서는 변수가 가리키고(refer)있는 데이터의 참조한다는 의미로 사용된다.
참조데이터는 동적으로 크기가변한다.. ( 와우.. C에서는 동적할당해줘도 고정값이였고 데이터늘어나면 늘어나는 코드를 작성해야했는데 .. 허헣)