1-3 변수 선언과 데이터 할당

박재현·2022년 5월 18일
0
post-thumbnail

변수 선언

기본적인 변수 선언식을 예로 들어보자.

let a;

"변할 수 있는 데이터를 만든다. 이 데이터의 식별자는 a로 한다." 라는 의미이다.
변수란 변경 가능한 데이터가 담길 수 있는 공간 또는 그릇이라고 할 수 있다.

컴퓨터는 메모리에서 비어있는 공간 하나를 확보한다. 이 공간의 이름(식별자)을 a라고 지정한다.

데이터 할당

데이터 할당 과정

let a;			// 변수 a 선언
a = 'abc';		// 변수 a에 데이터 할당

let a = 'abc';	// 변수 선언과 할당을 한 문장으로 표현
  1. 메모리에서 비어있는 공간을 확보하고 그 공간의 이름(식별자)를 설정
    2. a라는 이름을 가진 주소를 검색해서 그곳에 문자열 'abc'를 할당

=> 해당 위치에 문자열 'abc'를 직접 저장하지 않는다. 데이터 저장을 위한 별도의 메모리 공간을 확보해서 문자열 'abc'를 저장하고, 그 주소를 변수 영역에 저장한다.

실제 변수 선언부터 데이터 할당까지의 과정을 살펴보자.

  1. 변수 영역에서 빈 공간(@1003)을 확보한다.
  2. 확보한 공간의 식별자를 a로 지정한다.
  3. 데이터 영역의 빈 공간(@5004)에 문자열 'abc'를 저장한다.
  4. 변수 영역에서 a라는 식별자를 검색한다(@1003).
  5. 앞서 저장한 문자열의 주소(@5004)를 @1003의 공간에 대입한다.

데이터 변환을 자유롭게 할 수 있게 함과 동시에 메모리를 더욱 효율적으로 관리하기 위해 변수 영역에 값을 직접 대입하지 않고 메모리 영역에 값을 저장한다음, 해당 주소를 변수 영역에 저장한다.

변수 영역에 직접 값을 저장한다면?

변수 영역에 값을 직접 저장하고 중간에 있는 데이터를 늘려야되는 상황이 생겼다고 가정해보자.
해당 공간보다 뒤에 저장된 데이터들을 전부 뒤로 옮기고, 이동시킨 주소를 각 식별자에 다시 연결하는 작업을 진행해야 한다. 이러한 과정은 상당히 비효율적이다.

500개의 변수를 생성해서 모든 변수에 숫자 5를 할당하는 상황을 생각해보자.
각 변수 공간마다 매번 숫자 5를 할당하려고 하면 숫자형은 8바이트가 필요하다고 했으니 총 500 8 = 4000바이트를 써야한다.
숫자 5를 별도의 공간에 한 번만 저장하고 해당 주소만 입력한다면 주소 공간의 크기가 2바이트라고 가정했을 때, 500
2 + 8 = 1008바이트만 이용하면 된다.

할당된 데이터를 조작할 때

문자열 'abc'의 마지막에 'def'를 추가하려고 하면 'abc'가 저장된 공간에 'abcdef'를 할당하는 대신 'abcdef'라는 문자열을 새로 만들어 별도의 공간에 저장하고, 그 주소를 변수 공간에 연결한다. 이 경우는 문자열을 일부 제거하는 경우에도 마찬가지이다.

=> 기존 문자열에 어떤 변환을 가하든 상관 없이 무조건 새로 만들어 별도의 공간에 저장한다. 그리고 그 주소를 변수 공간에 연결한다.

const 로 선언된 변수의 경우, 변수 영역에 들어간 데이터의 주소를 변경할 수 없게 막아 불변성을 유지한 것으로 보인다.

profile
공동의 성장을 추구하는 개발자

0개의 댓글