JavaScript
변수 선언과 데이터 할당 /가변값과 가변성
한우종
2024. 8. 13. 21:58
변수 선언과 데이터 할당
할당 예시
- 선언과 할당을 풀어 쓴 예시
let str //선언
str = "asd" //할당
- 선언과 할당을 붙여쓰는 예시
let str = "asd"
메모리 영역 예시표
변수영역 | 주소 | 101 |
102 | 103 | 104 | 105 |
데이터 | str/201 | |||||
데이터 영역 |
주소 | 201 | 202 | 203 | 204 | 205 |
데이터 | 'asd' |
구조 풀이
선언한 변수명을 변수영역의 데이터가 빈값인 주소에 할당한다.
▼
선언한 변수의 할당값을 데이터 영역에서 찾아본다.
▼
데이터 영역에 할당값이 없을 경우 빈주소에 할당값을 할당한다.
▼
마지막으로 데이터 영역에서 데이터가 저장된 주소를 변수영역에 참조한다.
▼
str/201(참조)
- 값을 변수영역에 바로 대입하지 않는 이유
데이터 변환을 자유롭게할 수 없다.
숫자는 8byte 로 고정이지만 문자는 고정이 아니기 때문에
이미 저장된 데이터를 변환할 때 훨씬 더 큰 데이터를 저장하려 한다면
뒤에있는 데이터를 모두 뒤로 밀뤄내야하기 때문에 상당히 비효율적인 방식이다.
별도 공간에 데이터를 확보해 놓고 주소를 가져오는게 효율적이다.
메모리의 효율적 관리
- 모든 데이터를 변수영역에 저장할시
num =1 의 경우 8byte x 변수의 개수
을 해줘야하기에
num =1 만개 생성시
8byte x 10000개 = 80000byte
- 데이터 영역에 데이터를 확보해놓고 주소를 가져올시
데이터영역 = 1 (8byte)
변수영역 = let num (2byte)
변수영역 x 10000 +데이터영역 = 20000byte + 8byte
즉 같은 10000개를 생성할시 필요한 데이터는 데이터 영역에서 가져오기 때문에 8byte밖에 추가되지않음
- 메모리를 기준으로 다시한번 생각해보는 두가지 주요개념
- 변수 : 변수 영역 메모리를 변경할 수 있음
- 상수 : 변수 영역 메모리를 변경할 수 없음
- 불변하다 : 데이터 영역 메모리를 변경할 수 없음
- 불변하지않다 : 데이터 영역 메모리를 변경할 수 있음
가변값과 가변성
가변값과 가변성
- 가변값
데이터의 값을 수정할 수 있다는 의미
요소를 추가하거나 삭제를 통해 값을 변환할 수 있다.
- 가변성
데이터가 가진 성질
데이터 자체를 수정하면 이를 참조하는 모든 변수가 영향을 받는다.
데이터 1 에 대한 참조가 여러개 있을때
데이터가 수정되면 그 수정된 데이터는 모든 참조에 반영된다.
참조형 데이터의 변수 할당 과정
- 참조형 데이터는 별도 저장공간 (obj을 위한 별도공간) 이 필요하다.
예시코드
let obj = {
a:1,
b:"bbb",
}
예시표
변수영역 | 주소 | 101 | 102 | 103 |
데이터 | obj/301~ | |||
데이터 영역 |
주소 | 201 | 202 | 203 |
데이터 | 1 | 'bbb' | ||
obj 별도공간 |
주소 | 301 | 302 | 303 |
데이터 | a / 201(참조) | b /202(참조) |
구조 풀이
변수명을 변수영역에 셋팅한다 (obj)
▼
obj별도공간 에서 a 와 b가 들어있는 주소를 찾음
▼
데이터가 없으므로 데이터 영역에 데이터를 추가한다. 201(1),202("bbb")
▼
데이터 영역에서 맞는값을 찾아 obj별도공간에 참조함 301(a /201(참조값 1)) ,302(b/202(참조값"bbb"))
▼
마지막으로 obj의 주소를 변수영역에 참조한다. obj /301~부터 가져온다.
데이터를 수정할 경우
- ex : a의 값을 10으로 바꾸고싶다
변수영역 | 주소 | 101 | 102 | 103 |
데이터 | obj/301~ | |||
데이터 영역 |
주소 | 201 | 202 | 203 |
데이터 | 1 | 'bbb' | 10 | |
obj 별도공간 |
주소 | 301 | 302 | 303 |
데이터 | a / |
b /202(참조) |
풀이
a의 값을 10으로 바꾸려 했지만 참조할 데이터 영역에 10의 값이 없으므로
데이터 영역의 새로운 주소에 10의값을 추가한다. 203(10)
▼
참조할 주소가 바뀌었으므로 obj별도공간에 데이터 참조를 바꿔줌
- 문제점
위의 경우 a의 참조값 자체가 변경되기떄문에 a의 주소 즉 301의 주소를 여러곳에 사용했을 경우
이를 참조하는 모든 변수가 영향을 받는다.