[JS] 자바스크립트 선언과 할당 - 기본형

Chipmunk_jeong·2021년 8월 1일
0

TIL

목록 보기
53/62
post-thumbnail

해당 블로깅은 인프런의 강의를 들으며 공부한 내용을 정리한 글입니다.
ES5 기준 핵심 내용을 공부하면서 작성하는 블로깅

자바스크립트의 데이터타입에는 크게 2가지가 있다.

  • Primitive Type
  • Reference Type

Primitive Type


기본형 타입의 코드를 작성할때 일어나는 원리를 알아보자

let a;

위의 코드를 작성했을때 일어나는 일은 아래와 같다.

위의 1004번메모리에 a라는 이름으로 메모리가 할당이 된다.
값은 아직 지정이 안되어있어 비어있는 상태

그런 다음

let a;
a = 4;

4라는 값을 할당하는 코드를 추가하면 메모리에서는

5001번의 메모리에 4라는 값을 저장후 해당 5001번 주소를 1004번 메모리의 값으로 저장하게 된다.

그리고 a의 값을 b라는 변수와 c라는 변수를 생성해서 할당한다면

let a = 4;
let b = a;
let c = 4;


이렇게 4를 담고있는 5001번의 메모리의 주소를 각각 값으로 저장된다.
그런데 여기서 이상한 점은 변수 b는 5001번의 메모리를 가지는것이 맞다고 생각해도 왜 변수 c도 5001번메모리의 값을 가지는가?
그것은 메모리의 효율성을 위해서이다. 만약에 4라는숫자가아닌 999,999,999,999,999,999 라는 큰 수라고 생각해보자.
이 큰 수가 이미 만들어져 있는 메모리가 있다면, 해당 메모리를 가져오는것이 효율적일것이다. 이런점에서 어떠한 수를 할당할때 이미 메모리에 존재하고있는 수라면 그 메모리를 할당하게 된다.

자 그럼 여기서 a의 값을 변경한다면 어떻게 될까?

let a = 4;
a = 8;


위 처럼 5002번메모리에 새로운 8이라는 숫자를 할당하고 그 메모리를 값으로 가지게 된다.
그렇게 되면 5001번에 있는 4라는 값은 도달 불가능 상태가 되어
가비지 컬렉션에 의해서 메모리에서 삭제가 된다마지막으로 값을 복사한뒤 하나의 값을 변경한다면

let a = 10;
let b = a;

위와 같은 상태에서

let a = 10;
let b = a;
let b = 5;

5002번 메모리에 5라는 숫자를 할당하고 1005번 메모리는 5002번메모리를 가져온다.
여기서 5001번의 값을 5로 변경을 해야되는것 아니냐? 라고 한다면,
메모리는 추가 삭제만 한다고 보면 편하다. 즉 , 수정이란게 없다.
10이라는 숫자를 가지고있다가 5를 가지기위해서는 새로운 메모리에 5를 할당하고 그 메모리주소를 가져오는게 메모리다.
그래서! 기본타입은 값을 복사하고 하나의값을 변경하더라고 변경하는 하나의 값만 바뀐다.


profile
Web Developer

0개의 댓글