-
Primitive/Reference Data typesJavaScript ES6 2022. 5. 17. 02:07
var 변수 = 'abcd' var 숫자 = 1234
이런 문자와 숫자는 Primitive data type이다 즉, 변수에 값이 그대로 저장된다.
근데,
var 어레이 = [1,2,3] var 오브젝트 = {name : 'Kim'}
이렇게, Array, Object는 변수에 값이 저장이 안되고, 변수에 reference가 저장된다.
reference는 [1,2,3]이 저기 있다는 화살표이다.
reference type의 특징을 알아보자. 복사를 할 때
var 이름1 = {name:'Kim'} var 이름2 = 이름1; 이름1.name = '박';
이렇게 적으면 이름1은 박으로 변경이 되는데, primitive에선 이름2는 그대로 킴인데, reference에선 이름2도 박으로 바뀐다. 즉, 이름1에 김이 저장되는게 아니라 자료가 저기 있어요 라고 화살표가 할당되었기 때문이다.
위의 사진과 같이 둘다 name : kim이란 메모리를 가리키는 것 이라고 한다. 그래서 이름1을 바꾸면 메모리를 바꾸고 이름2가 가리키는 것은 똑같기에 같은 값이 나오게 된다.
그래서 함부로 복사하면 안된다. 만약, 복사하고 싶으면 object 복사 기계를 만들어서 복사해야 한다.
몇가지 예제로
var 이름1 = {name : 'kim'} var 이름2 = {name : 'kim'}
이런 상황에서 이름1 == 이름2를 하면 false가 나오게 된다. 즉, 오브젝트 자체가 저장된게 아니라 화살표만 저장된거라 다른화살표가 되기 때문에 다르다고 나온다.
그리고
var 이름1 = {name : '김'} function 변경(obj) { obj.name = 'Park' } 변경(이름1)
이렇게 오브젝트를 변경하는 함수를 만들어 사용하면 성공하게 된다. 근데 만약, 함수안에서 name: 'park'이렇게 재할당하면 name: '김'이 그대로 나온다. 이건 파라미터와 reference의 합작이라고 한다.
파라미터자리에 있는 obj는 변수생성을 하는 것과 같다. 그래서 함수안에서 이름1 -> 김 / obj -> park이 된다.
'JavaScript ES6' 카테고리의 다른 글
prototype과 constructor말고 상속 (0) 2022.05.18 객체지향 constructor,prototype (0) 2022.05.17 함수 업그레이드 (0) 2022.05.11 ...spread operator (0) 2022.05.10 literals (0) 2022.05.09