Javascript 변수 - 개발자의 책 읽기(모던 자바스크립트 DeepDive #2)
4.1 변수란 무엇인가? 왜 필요한가?
계산을 한다고 가정해 보겠습니다.
20+10
이 개념을 해석할 때 20이라는 변수와 +라는 연산자 그리고 10이라는 변수가 있습니다. 인간은 이 모든 값을 두뇌에 저장합니다. 그러나 컴퓨터는 2곳으로 나누죠. 연산은 CPU가 하지만 변수 데이터를 저장하는 곳은 메모리입니다. 이 계산의 의도는 30이라는 값을 저장해 다시 사용하는 것이죠? 그러면 30이라는 값의 메모리에 CPU가 직접 접근할까요? 아닙니다. 이렇게 메모리 값에 직접 접근하면 실수로 운영체제가 사용하는 값을 바꾸면 시스템이 멈추는 문제가 생기죠. 그래서 JS는 변수라는 값으로 30을 저장해서 재사용합니다. 즉 직접적인 메모리 주소(0x0669F913)가 아니라 변수로 상징적인 메모리 공간을 지칭하는 표현을 만들어 값을 나타냅니다. 즉 정확한 주소가 아니라 메모리 위치만 나타내주는 거죠. 변수에 값을 저장하는 것을 할당이라 하고, 변수에 저장된 값을 읽어오는 것은 참조라고 합니다.
4.2 식별자
변수의 이름을 지으면, 그 이름을 식별자라고 합니다. 변수 뿐 아니라, 함수, 클래스, 등 메모리 상에 존재하는 어떤 값을 식별 할 수 있는 모든 이름을 식별자라고 합니다. 식별자는 앞서 말한 메모리 주소와 매핑관계로 연결되어 있습니다.
4.3 변수 선언
변수 선언이란 변수를 생성하는 것입니다. 자세히 말하면 값을 저장하기 위해 메모리 공간을 확보(allocate)하고 변수 이름과 확보된 메모리 공간의 주소를 연결하는 것이죠. 이 메모리 공간은 확보가 해제되기 전까지는 누구도 확보된 메모리 공간을 사용할 수 없도록 보호되므로 안전하게 사용할 수 있습니다. 자바스크립트 엔진은 변수를 선언 할 때 다음과 같은 2단계를 진행합니다.
- 선언단계: 변수 이름을 등록해서 자바 스크립트 엔진에 변수의 존재를 알린다.
- 초기화 단계: 값을 저장하기 위한 메모리 공간을 확보하고 암묵적으로 undefined를 할당해 초기화한다.
초기화 단계를 왜 거치는지 의아할 수도 있습니다. 그러나 초기화를 거치지 않으면 다른 어플리케이션에서 할당된 값 즉, 쓰래기 값이 딸려오는 경우가 생기죠. 이걸 방지하기 위해 JS는 모든 변수 선언시 초기화 값을 진행합니다.