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 / 201(참조) 203(참조)  b /202(참조)  

 

풀이

a의 값을 10으로 바꾸려 했지만 참조할 데이터 영역에 10의 값이 없으므로
데이터 영역의 새로운 주소에 10의값을 추가한다.  203(10)
▼ 
참조할 주소가 바뀌었으므로 obj별도공간에 데이터 참조를 바꿔줌

 

  • 문제점
위의 경우 a의 참조값 자체가 변경되기떄문에 a의 주소 즉 301의 주소를 여러곳에 사용했을 경우
이를 참조하는 모든 변수가 영향을 받는다.