✅ 변수 선언과 데이터 할당
- 할당 예시(풀어 쓴 방식, 붙여 쓴 방식 동일하게 동작해요)
👍/** 선언과 할당을 풀어 쓴 방식 */
var str;
str = 'test!';
/** 선언과 할당을 붙여 쓴 방식 */
var str = 'test!';
- ⬇ 강의를 참고하셔서, 직접 아래 표를 작성해보세요!
주소(변수영역) | ... | 1002 | 1003 | 1004 | 1005 | ||
데이터 (변수영역) | var str; | 이름:str 데이터: 5004 var a = 1; |
var b = 1; | var c = 1; | var d = 1; | ... 만개의 변수 공간 |
|
주소(데이터영역) | ... | 5002 | 5003 | 5004 | 5005 | ||
데이터 (데이터영역) |
str = 'test!'; | '' | '' | 'test' |
- /** 선언과 할당을 풀어 쓴 방식 */ var str; str = 'test!'; /** 선언과 할당을 붙여 쓴 방식 */ var str = 'test!';
- 값을 바로 변수에 대입하지 않는 이유(=무조건 새로 만드는 이유)
- 자유로운 데이터 변환
- 이미 입력한 문자열이 길어진다면?
- 숫자는 항상 8byte로 고정이지만, 문자는 고정이 아니에요(영문 : 1byte, 한글 : 2byte). 그래서, 이미 1003 주소에 할당된 데이터를 변환하려 할 때 훨씬 더 큰 데이터를 저장하려 한다면 → 1004 이후부터 저장되어있는 모든 데이터를 오른쪽으로 다~~~ 미뤄야 하겠죠..!?(데이터를 자유롭게 저장할 수 없다)
- 메모리의 효율적 관리
- 똑같은 데이터를 여러번 저장해야 한다면?
- 1만개의 변수를 생성해서 모든 변수에 숫자 1을 할당하는 상황을 가정해 봅시다. 모든 변수를 별개로 인식한다고 한다면, 1만개의 변수 공간을 확보해야 해요. var a = 1;
- 바로 대입하는 case) 숫자형은 8 바이트 고정이죠?
- 1만개 * 8byte = 8만 byte
- 변수 영역에 별도 저장 case)
- 변수 영역 : 2바이트 1만개 = ****2만바이트
- ℹ️ 이해를 돕고자, 변수 영역에 저장되는 데이터는 2바이트로 가정했어요!
- 데이터 영역 : 8바이트 1개 = 8바이트
- 총 : 2만 8바이트
- 바로 대입하는 case) 숫자형은 8 바이트 고정이죠?
- 자유로운 데이터 변환
(4) 기본형 데이터와 참조형 데이터
1. 메모리를 기준으로 다시한번 생각해보는 두 가지 주요 개념
- 변수 vs 상수
- 변수 : 변수 영역 메모리를 변경할 수 있음
- 상수 : 변수 영역 메모리를 변경할 수 없음
- 불변하다 vs 불변하지 않다
- 불변하다 : 데이터 영역 메모리를 변경할 수 없음
- 불변하지 않다 : 데이터 영역 메모리를 변경할 수 있음
- 불변값과 불변성(with 기본형 데이터)
// a라는 변수가 abc에서 abcdef가 되는 과정을 통해 불변성을 유추해봅시다!
// 'abc'라는 값이 데이터영역의 @5002라는 주소에 들어갔다고 가정할게요.
var a = 'abc';
// 'def'라는 값이 @5002라는 주소에 추가되는 것이 아니죠!
// @5003에 별도로 'abcdef'라는 값이 생기고 a라는 변수는 @5002 -> @5003
// 즉, "변수 a는 불변하다." 라고 할 수 있습니다.
// 이 때, @5002는 더 이상 사용되지 않기 때문에 가비지컬렉터의 수거 대상이 됩니다.
a = a + 'def';
쓸모없어진 데이터는 JS가비지 컬렉터에서 수거
'Javascript' 카테고리의 다른 글
불변 객체 : 얕은복사vs깊은복사_v3.4 (0) | 2023.12.15 |
---|---|
변수선언 데이터 할당_v3.3 (0) | 2023.12.15 |
데이터 타입&메모리_v3.1 (0) | 2023.12.15 |
CSS / Javascript 파일 분리 (0) | 2023.12.07 |
SQLAlchemy로 Database 조작하기 (0) | 2023.12.04 |