Javascrpit에는 두가지의 자료형이 존재한다.
그럼 이 두가지에는 각각 무엇이 있는지 확인하고, 어떤 차이가 있는지 알아보자.
원시 자료형은, 객체가 아니면서 메소드도 가지지 않는 데이터라고 명시하고 있다.
그리고 값을 변수 그 자체에 저장한다.
그리고 그 종류에는
String
number
bigint
boolean
undefine
symbol
null로 총 7개가 존재한다.
그리고 값은 변하지 않으며, 변형할 수 없다고 적혀있다.
참조 자료형은 값을 할당할 경우 값이 아닌 메모리 주소
에 할당을 한다.
그 종류에는
Array
Object
function(){} 가 존재한다.
이것은 얕은 복사, 깊은 복사와도 큰 연관관계가 존재한다.
아래 사진을 한번 천천히 해석을 해보자.
참고자료형인 객체 arr1가 존재한다.
그리고 arr2에는 arr1을 대입시켰다.
그러나 화살표가 나아가는 방향을 보면, arr1와 arr2는 같은 object를 가리키는 것을 볼 수 있다.
이것은 참고자료형의 고유한 형태 때문에 이러한 것이 표현이 되는 것인데
값을 변수에 저장하는 것이 아니라, 메모리 주소에 저장하기 때문에 그렇다.
조금 더 쉽게 이해를 하자면
arr1
은상자에 담아놓고
그상자 속
에 money:2000과 hobby를 넣어뒀다고 생각하면 된다.
그러니 arr2
은 상자 그 자체
를 가져왔기 때문에 같은 것이 되는 것이며
값을 수정할 경우에는 상자 속의 내용물 또한 같이 바뀌게 되는 것이다.
하지만 이번에는 원시 자료형 number에 속하는 b와 d를 보도록 하자
d가 b를 똑같이 가져왔음에도 불구하고 각자 다른 공간을 할당받고 있다.
그렇기에 d의 값을 변화시키더라도 영향을 주지 않는다.
그렇다면 이 둘은 왜 이런 차이를 가지고 있게 된걸까?
이유는 상당히 단순하다고 생각한다.
들어가야하는 값의 크기가 다르기 때문이다.
잘 확인을 해보면 원시 자료형
에는 단 한개의 값밖에 들어가지 못한다.
그러나 참고 자료형
에서는 다양한 값이 한번에 들어갈 수 있고, 그 값의 크기가 어느정도 될지 예상을 할 수 없다.
그렇기 때문에 이런 차이를 가지고 있다고 생각하고 있다.