본문 바로가기
프로그래밍/자바스크립트 ES6

자바스크립트 ES6 #11 원시 값과 객체의 비교

by 참외롭다 2023. 9. 14.
반응형

 

#원시값 #문자타입 #불변성 #유사배열객체 #객체

 


 

원시 값과 객체의 비교

 

자바스크립트가 제공하는 7가지 타입은 크게 원시 타입객체 타입으로 구분할 수 있다.

 

- 원시 타입은 변경 불가능한 값이고 객체 타입은 변경 가능한 값이다.

 

- 원시 타입 값은 변수에 할당하면 확보된 메모리 공간에 실제 값이 저장되고 객체 타입의 값은 참조 값이 저장된다

 

- 원시 값은 다른 변수에 할당하면 원시 값이 복사되어 전달되고 이를 값에의한전달이라 한다.

 

- 객체 값은 다른 변수에 할당하면 참조 값이 복사된다. 이를 참조에의한전달이라 한다.

 


# 원시값

 

원시값은 변경 불가능 한 값

 

- 변수는 값을 저장하기위해 확보한 공간의 식별자.

 

- 은 확보한 공간에 저장된 표현식의 평가결과를 말한다.

 

변경 불가능 하다는 것은 값에 대한 진술이다 .변수에 값을 재할당하는 것과 혼동하지 않도록 주의해야한다.

 

 

문자열과 불변성

 

1개의 문자는 2바이트의 메모리 공간에 저장된다. 따라서 문자열은 몇 개의 문자로 이뤄졌느냐에 따라 필요한 메모리 공간의 크기가 결정된다. 이런 이유로 C는 문자열을 배열로 처리하고 Java는 객체타입으로 처리한다.

 

하지만 자바스크립트는 원시타입인 문자열타입을 제공한다.

 

문자열타입은 다음과 같은 특성을 가진다.

 

- 원시 타입이다.

 

- 변경 불가능하다.

 

- 유사배열객체이면서 이터러블이다.

 


값에의한전달

 

변수에 변수를 할당했을 때 무엇이 어떻게 전달될까?

 

- 변수에 원시 값을 가진 변수를 할당하면 할당받는 변수에는 할당되는 변수의 원시값이 복사되어 전달된다. 이를 값에 의한 전달 이라 한다.

 

- 복사된 값은 다른 메모리 공간에 저장된 별개의 값이다.

 

var score = 80;
var copy = score;

score === copy; //true

score = 100;

score === copy; //false

값에 의한 전달 도 사실은 메모리 주소를 전달한다. 이는 모든 변수가 저장공간의 주소만을 가지고 있기 때문이다.


할당 되는 변수의 메모리 주소에 들어있는 값을 복사해 새로운 값을 생성하고 메모리 주소를 전달한다.


결과적으로 중요한 것은 두 변수의 원시 값은 서로 메모리 공간에 저장된 별개의 값이므로 서로 절대 간섭할 수 없다는 것이다.


 

# 유사배열객체

 

유사 배열 객체는 배열처럼 인덱스 프로퍼티 값에 접근할 수 있고 length 프로퍼티를 갖는 객체이다.

 

ITERABLE이기때문에 순회할 수 있다.

var str = "string";
str[0]; //s
str.length; //6
str.toUpperCase(); //string

// 문자열 'Hello'가 생성되고 변수 str은 'Hello'가 저장된 메모리 공간의 첫 번째 메모리 셀 주소를 가리킨다.
var str = "Hello";
// 문자열 'world'가 생성되고 변수 str은 'world'가 저장된 메모리 공간의 첫 번째 메모리 셀 주소를 가리킨다.
str = "world";

//문자열은 유사배열객체이기 때문에 인덱스로 접근할 수는 있지만 원시값이므로 값을 변경할수는 없다.
str[0] = "S";
str; // string

 

# 객체

 

객체는 프로퍼티의 수가 정해져 있지않고 동적으로 추가/삭제 될 수 있다.

 

- 미리 메모리 공간의 크기를 정해 둘 수 없어 원시 값과는 다른 방식으로 동작한다.

 


변경 가능한 값

 

객체를 할당한 변수가 기억하는 메모리 주소를 통해 메모리 공간에 접근하면 참조 값에 접근할 수 있다.

 

- 참조값은 생성된 객체가 저장된 메모리 공간의 주소이다

 

- 객체를 할당한 변수의 경우 '변수는 객체를 참조하고있다' 라고 표현한다.

 

- 여러 개의 식별자가 하나의 객체를 공유할 수 있다는 단점이 존재한다.


참조에 의한 전달

 

객체를 할당한 변수를 다른 변수에 할당하면 두 변수는 모두 하나의 객체를 공유한다.


두 변수간의 값에 의한 전달, 참조에 의한 전달 모두 변수에 할당된 메모리 주소를 전달하는것은 동일하다.


다만 주소가 가리키는 곳이 원시 값이냐 참조값이냐의 차이만 있을 뿐이다.

반응형