일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- testing
- svelte
- 인라인핸들러
- GraphQL
- PostgreSQL
- githook
- JavaScript
- 도커
- mock
- Terraform
- :=
- TypeScript
- golang
- react
- docker-network
- 도커컨테이너
- docker
- GIT
- reactjs
- go
- 번역
- ...$$restProps
- cron
- IAC
- nestjs
- Svelte LifeCycle
- bitwiseNot
- onDestory
- smui
- apiTest
- Today
- Total
Den`s blog
불변성과 가변성 본문
불변성 (Immutability) 이란, 문자 그대로 변하지 않는 것을 의미한다,let a = 1
란 것을 보면, a 라는 변수에 1을 대입하는 건데, 여기서 1은 원시데이터 이다.
1. 원시데이터 (Primitives) 와 불변성
원시데이터는 대표적으로 Number, String, Boolean, Null, Undefined, Symbol 등이 있으며, 이 원시데이터(타입)은 불변하다.
그래서 let a = 1
를 할때, 1이 메모리에 들어가게 되고 a 라는 변수는 1 의 메모리주소를 참조할 뿐이다.
여기서 let b = a
를 하면, b는 a 가 바라보고 있는 메모리를 같이 바라보게 된다.
근데 여기서 a = 3
을 하게 되면, 3 이 새로운 메모리에 들어가고 a 는 3이 들어간 메모리주소를 참조하게 된다.
(b는 그대로)
이것이 불변성이다.
여기서 다시 b = 5
를 하게 되면 5가 새로운 메모리에 들어가고 b 는 그 메모리주소를 참조하게 된다.
이렇게 되면 1 이 들어간 메모리는 쓸모가 없게되는데, 특정 상황이 되면 GC (Garbage Collection) 가 메모리에 있는 내용을 지워주게 되고 다시 쓸 수 있게 된다.
2. 객체데이터와 가변성
let a = {
k : 1,
};
let b = a;
a.k = 2;
여기서 중괄호가 감싸고 있는, 즉 a에 할당된 것을 객체라고 한다. javascript 객체는 Object, Array, Function, Map, WeakMap, Set 등이 있다. 이 데이터들은 가변한다 (Mutable).
1처럼 본다면, { k : 1 } 객체는 메모리에 할당이 되고 a는 그곳을 바라보게 되고, b 도 같이 바라보게 된다.
그 뒤에 a.k = 2 를 실행하게 되면 해당 메모리내에서 변경이 된다. 그렇기 때문에 b 도 같이 변하게 된다.
(중간에 빨간 줄은 무시)
'Javascript' 카테고리의 다른 글
tilde (~) 연산자, double tilde (~~) (0) | 2021.06.19 |
---|---|
Optional Chaining (0) | 2021.01.30 |
ParseInt 의 약어 (0) | 2021.01.30 |