코드스테이츠 Checkpoint.2 (원시자료형, 참조자료형)

박성훈·2022년 7월 11일

JavaScript

목록 보기
11/25
post-thumbnail

원시자료형

string, number, bigint, boolean, undefined, symbol, null

데이터 저장공간 (변수)에 하나의 데이터만 넣을 수 있는 자료형이다.

let a = 10;
let b = a;
b = 13;

console.log(a) // 10

위의 예시에 따르면, a라는 변수에 10을 할당하고, b라는 변수에 a를 할당했다.
여기서 a에 할당된 값은 number 즉, 원시자료형이다.
그렇기 때문에 b에 a를 할당한다고 해도, a의 값 10이 복사되어 할당되는 것이고, 그 b에 13을 할당하게 되면, b는 13으로 재할당되지만, a에는 변화가 없다. (주소가 아닌 값이 할당되었기 때문이다)

참조자료형

배열, 객체, 함수

변수에 해당 데이터를 가리키고 있는 주소가 할당된다.

참조자료형은 배열, 객체 등 여러 데이터의 집합으로 이루어져 있다.

arr = [1,2,3,4]

위의 예시의 경우 arr이라는 변수에 배열 [1,2,3,4]가 할당된 상황이다.
하지만, 정확히 말하면 변수에 배열이 할당된 것이 아니라, 변수 arr에 배열 [1,2,3,4]를 가리키고 있는 주소값이 할당된 것이다.

배열 [1,2,3,4]는 heap이라는 불리는 공간에 저장되어 있다.

let a = [1,2,3,4];
let b = a;

b[2] = 23;

console.log(a); // [1,2,23,4]

위의 예시처럼 결과가 나오는 이유는
변수 a에 배열 [1,2,3,4]를 가리키는 주소값이 할당된다. 그리고, heap의 해당주소에 [1,2,3,4]가 생성된다.

변수 b에 a를 할당한다는 것은 heap에 있는 [1,2,3,4]를 가리키는 주소값을 할당하는 것이고, 결론적으로 a와 b는 동일한 배열 [1,2,3,4]를 참조하고 있다.

그렇기 때문에, b[2]에 23을 할당한다고 하면, heap의 [1,2,3,4]에 접근하여 2번째 인덱스를 가진 원소를 23으로 바꿔주는 것이고, b가 접근한 배열은 a가 참조하고 있는 배열과 같기 때문에 변수 a에도 영향이 미치는 것이다.

advanced

let myArray = [2,3,4,5];

let ourArray = myArray;

ourArray[2] = 35;
console.log(myArray); // [2,3,35,5]

ourArray = undefined;
console.log(myArray); // [2,3,35,5]

위와 같은 경우에 myArray에는 [2,3,4,5]를 가리키고 있는 주소값이 할당되어 있고, ourArray에도 myArray에 할당된 주소값이 할당되어있다.

이럴 경우, ourArray[2] = 35를 한다면 ourArray가 참조하고 있는 배열 [2,3,4,5]의 2번째 인덱스값을 가지고 있는 원소가 35로 할당되고, 그 배열을 참조하고 있는 myArray도 변경된다.

다만, ourArray에 undefined를 할당했을 경우, ourArray에 할당된 주소값은 없어지고 undefined가 재할당된다.

즉, ourArray에 할당된 데이터가 undefined로 변한 것이기 때문에, myArray에는 영향을 미치지 않고 변경되지 않는다.

profile
프론트엔드 학습일지

0개의 댓글