javascript의 변수 선언 과정에 대해서 알아보겠습니다. 이 글은 코어자바스크립트 책을 토대로 쓰여졌습니다.
컴퓨터는 모든 data를 0또는 1로 바꿔 기억한다. 이렇게만 표현할 수 있는 하나의 메모리 조각을 비트라고 한다. 메모리는 매우 많은 비트들로 구성돼 있는데, 각 비트는 자바스크립트에서는 바이트로 묶여 고유한 식별자를 통해 위치를 확인할 수 있다.
모든 데이터는 바이트 단위의 identifier, 더 정확하게는 메모리 주솟값을 통해 서로 구분되고 접근된다.
변수와 식별자의 근본적인 차이. 변수는 변경 가능한 data가 담길 수 있는 메모리 영역의 공간이다. 반면 식별자는 그 공간에서 어떠한 메모리 영역에서 어던 data를 식별하는데 쓰이는 이름, 즉 변수명이다.
변수를 선언하면 특정 식별자를 갖고 특정 값을 가진 공간의 주솟값이 등록된다.
let a;
변수를 선언한다는 명령은 컴퓨터로 하여금 메모리에서 비어있는 공간 하나를 확보하도록 한다. 그 공간에는 주솟값이 있고, 공간의 이름(식별자)를 a라고 지정한다. 여기까지가 변수 선언 과정.
이후에 사용자가 a에 접근하고자 하면, 컴퓨터는 메모리에서 a라는 이름을 가진 주소를 검색해 해당 공간에 담긴 data를 반환할 것이다.
a = 123;
a라는 이름을 가진 주소를 검색해서 그곳에 숫자 123을 할당한다.
그러나 실제로는 해당 위치에 숫자 123을 직접 저장하지 않는다. data를 저장하기 위한 별도의 메모리 공간을 다시 확보해서 숫자 123을 저장하고, 그 주솟값을 변수 영역에 저장하는 식으로 이뤄진다.
여기서 데이터의 성질이 구분된다. 변수 영역은 변수라는 공간안에 식별자와 주솟값을 가진다. 반면에 데이터 영역은 해당 공간 안에 그 값만을 갖는다.
왜 그럴까? 이는 데이터 변환을 자유롭게 할 수 있게 하면서 메모리를 더욱 효율적으로 관리하기 위함. 중복된 데이터에 대한 처리 효율이 높아진다.