불변성
프로그래밍에서 불변성은 메모리 영역의 값을 직접적으로 변경하지 않음을 의미
결론적부터 말하면 원시값은 메모리의 값을 직접 바꾸지 못함
원시값(Primitive)
number, string, boolean, undefined, null 등이 해당
1) 특징
원시값은 변수에 저장되고 불변하는 특징을 가짐
2) 원시값의 할당
- let 키워드로 변수명을 선언하고 값을 할당하면, 값을 저장하기 위한 기억 공간을 할당 받음
- let furit = '사과'
- fruit(변수명)에 메모리 공간이 할당되고, 메모리 공간 안에 값이 저장됨
- fruit은 곧 식별자
- fruit으로 값에 접근 & 값을 변경(재할당)
- fruit = '귤'
3) 원시값이 저장되는 식별자가 가리키는 것?
- 메모리 공간의 할당
- let 키워드로 변수를 선언
- 메모리 공간안에 let 키워드로 할당한 값이 저장됨
- 사과
- let 키워드의 변수명으로 메모리 공간 안의 값에 접근
- fruit
- 메모리 공간에 값을 변수명으로 재할당
- fruit = '귤'
4) 원시값의 불변성
원시값은 메모리에 저장되어 있는 값을 수정하지 못함
- 변수(fruit)에 담긴 값을 변경하면, 새로운 메모리 공간이 할당되어 변경된 값('귤')이 저장되고 변수 fruit은 '귤'이 담긴 새로운 메모리 공간을 가리킴
- 기존의 '사과'를 담고 있던 메모리 공간은 그대로 존재하다가, 더 이상 사용되지 않으면 가비지 컬렉터에 의해 제거됨
5) 결론
원시값을 할당한 변수 : 메모리 공간을 가리킴
- 이미 선언된 변수 fruit에 새로운 원시값인 '귤'을 재할당한 경우 새로운 메모리 공간에 새로 할당되는 값('귤')을 복사해 입력하고, 선언된 변수명(fruit)이 이를 가리키도록 처리
참조값
원시값을 제외한 객체(배열, 객체, 함수)를 의미
1) 특징
참조값은 메모리의 주소값이 저장되고, 가변하는 특징을 가짐
2) 참조값의 할당
let user = {
name : 'Jerry',
age : 29,
}
- user(변수명)라는 메모리 공간이 할당되고, 메모리 공간의 주소값이 user에 저장됨
- 하나의 공간에는 2개의 정보가 저장될 수 없음
- 메모리 주소가 저장되었기 때문에 user의 key, value는 다른 공간에 저장됨
- name과 age가 저장되어있는 메모리 공간을 가리키는 주소값이 저장되는 것
- 메모리 주소값에 해당하는 메모리 공간에 user의 key, value가 저장됨
user 변수에는 메모리 주소만 저장되고, 실제 데이터는 다른 공간에 저장!
user는 메모리 주소값을 참조해 다른곳에 저장된 실제 데이터(name, age)에 접근
3) object의 복사
let admin = user
object의 값을 복사할 때 대상 전체가 아닌 object내의 주소값만 복사되는 문제
user는 메모리의 주소값을 가지고 있기 때문에 admin은 주소값 만을 복사하게 되고 같은 공간을 가르키게 됨
'Dev-log > JAVASCRIPT' 카테고리의 다른 글
JavaScript - 비동기 (0) | 2024.05.13 |
---|---|
JavaScript 함수 (0) | 2024.05.04 |
JavaScript 함수선언문 vs 함수표현식 (0) | 2024.05.04 |