목차

흔한 변수에 대한 오해

const name = '홍길동'

위의 코드를 보면 우리는 name이라는 변수에 홍길동이라는 데이터가 들어갈 것이라고 생각한다.
하지만 디테일하게 말하면 틀린 말이다.

변수의 두 얼굴

변수의 의미는 변할 수 있는 수이다. 여기서 말하는 데이터를 뜻한다.

const name = '홍길동'

위의 코드에서 name은 큰 의미에서 변수이지만, 디데일하게 얘기하면 식별자, 변수명이다.
사실 우리가 흔히 말하는 변수(name)는 하나의 공간을 뜻한다. 그 공간에 이름을 붙여준 것이 식별자, 변수명인 것이다.

여기서 말하는 하나의 공간메모리를 뜻한다. 모든 수(데이터)메모리에 올라간다. 그 메모리 주소를 이름으로 매핑한 것이 식별자, 변수명인 것이다.

메모리 공간의 이름, 변수명

const name = '홍길동'

위의 코드에서 name은 1001이라는 주소(임의의 메모리 주소)에 할당된다. 1001의 데이터는 변수명(식별자)인 name이 들어가고 값으로 5001이라는 데이터 할당 메모리 주소 값이 들어간다.


메모리 주소 데이터
1002 이름: name, 값: 5001
5001 ‘홍길동’

데이터를 복붙하여 사용

위의 내용과 표처럼 메모리 주소의 이름을 붙여준 것이 변수명이고, 값은 또 다른 메모리 주소를 갖는다.

const personA = '홍길동'
const personB = '홍길동'

만약 위와 같이 동명이인을 코드로 표현하면 우리는 흔히 홍길동이 두번 만들어져서 대입되는 줄 안다. 하지만 그것은 틀렸다.


메모리 주소 데이터
1002 이름: personA, 값: 5001
1003 이름: personB, 값: 5001
5001 ‘홍길동’

위의 표와 같이 값이 복사되는 것이 아닌 메모리 주소 값이 복사되는 것이여서 결국 홍길동이라는 데이터는 하나이다.

let personA = '홍길동'
let personB = '홍길동'

personA = '이순신'

만약 위에 같이 똑같았던 두 개의 변수 중 하나의 값이 변경하면 어떻게 될까?


메모리 주소 데이터
1002 이름: personA, 값: 5002
1003 이름: personB, 값: 5001
5001 ‘홍길동’
5002 ‘이순신’

새로운 데이터 영역의 메모리에 이순신을 만들어서 대입 후 personA라는 이름을 가진 메모리 주소의 값에 넣어준다.

결론

const name = '홍길동'

위의 코드를 보면 우리는 name이라는 변수에 홍길동이라는 데이터가 들어갈 것이라고 생각한다.
하지만 디테일하게 말하면 틀린 말이다.

처음 했던 말을 좀 더 정확하게 얘기하면 위의 코드는 메모리 주소의 이름을 name이라고 정하고, 그 이름의 데이터 값에 다른 메모리 주소에 '홍길동'이라는 값을 만들고 그 메모리 주소값을 대입하는 것이 맞다.