Front-End

vsoghlv@naver.com

자바스크립트 원시 값

자바스크립트에서 제공하는 타입은 이전에 공부한 객체 타입과 원시 타입으로 나누어진다.

원시타입과 객체타입의 차이는 크게 3가지가 있다.

  • 원시 타입의 값은 변경 불가능하지만 객체 타입의 값은 변경 가능하다.
  • 원시 값을 변수에 할당하면 변수(확보된 메모리 값) 에는 실제 값이 저장되지만 객체는 변수에 참조 값이 저장된다.
  • 원시 값을 갖는 변수를 다른 변수에 할당하면 원본의 원시 값이 복사되어 전달된다. -값에 의한 전달, 객체를 가리키는 변수를 다른 변수에 할당하면 원본의 참조 값이 복사되어 전달된다. - 참조에 의한 전달

변수는 하나의 값을 저장하기 위해 메모리 공간, 또는 공간을 식별하기 위해 붙인 이름으로 값이란 표현식이 평가되 생성된 결과가 저장된 것이다. 위에서 말한 값을 변경 불가능 하다는 것은 원시 값 자체를 변경할 수 없다는 말이다. 변수는 재할당을 통해 값 변경이 가능하다.

원시값은 읽기 전용 값이다. 변수에 원시 값을 재할당 하면 새로운 메모리 공간을 확보 후 재활당한 원시값을 저장 후 변수는 그 값을 가리킨다.

문자열과 불변성

원시 타입별로 메모리 공간의 크기가 다른데 문자열은 이루어진 문자의 개수에 따라 그 크기가 다르다. (1개당 2바이트를 가진다.) 숫자 값은 1 이든 100000 이든 동일한 8바이트가 필요하다. 문자열 또한 변경이 불가능하다

let str = 'hello';
str = 'hi';//변수가 가리키는 주소만 변경되었을 뿐이다.

값에 의한 전달

let score = 80;
let copyScore = score;

이때 만약 copyScore 에 score 를 할당 후 score 의 값을 변경한다고 copyScore 의 값이 변경되지는 않는다. 원시값을 복사 후 할당 하므로 서로 가리키는 주소가 다르기 때문이다.

즉, score 의 80 과 copyScore 의 80은 다른 메모리에 저장된 별개의 값이다. 결국 값이 아닌 메모리 주소를 전달하는 것이다.