본문 바로가기

Javascript

변수 선언과 데이터 할당_v3.2

✅ 변수 선언과 데이터 할당

  1. 할당 예시(풀어 쓴 방식, 붙여 쓴 방식 동일하게 동작해요)
👍/** 선언과 할당을 풀어 쓴 방식 */
var str;
str = 'test!';

/** 선언과 할당을 붙여 쓴 방식 */
var str = 'test!';
  1. ⬇ 강의를 참고하셔서, 직접 아래 표를 작성해보세요!
주소(변수영역) ... 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'      
    1. /** 선언과 할당을 풀어 쓴 방식 */ var str; str = 'test!'; /** 선언과 할당을 붙여 쓴 방식 */ var str = 'test!';
    2. 값을 바로 변수에 대입하지 않는 이유(=무조건 새로 만드는 이유)
      1. 자유로운 데이터 변환
        1. 이미 입력한 문자열이 길어진다면?
        2. 숫자는 항상 8byte로 고정이지만, 문자는 고정이 아니에요(영문 : 1byte, 한글 : 2byte). 그래서, 이미 1003 주소에 할당된 데이터를 변환하려 할 때 훨씬 더 큰 데이터를 저장하려 한다면 → 1004 이후부터 저장되어있는 모든 데이터를 오른쪽으로 다~~~ 미뤄야 하겠죠..!?(데이터를 자유롭게 저장할 수 없다)
      2. 메모리의 효율적 관리
        1. 똑같은 데이터를 여러번 저장해야 한다면?
        2. 1만개의 변수를 생성해서 모든 변수에 숫자 1을 할당하는 상황을 가정해 봅시다. 모든 변수를 별개로 인식한다고 한다면, 1만개의 변수 공간을 확보해야 해요. var a = 1; 
          1. 바로 대입하는 case) 숫자형은 8 바이트 고정이죠?
            1. 1만개 * 8byte = 8만 byte
          2. 변수 영역에 별도 저장 case)
            1. 변수 영역 : 2바이트 1만개 = ****2만바이트
            2. ℹ️ 이해를 돕고자, 변수 영역에 저장되는 데이터는 2바이트로 가정했어요!
            3. 데이터 영역 : 8바이트 1개 = 8바이트
            4. 총 : 2만 8바이트

(4) 기본형 데이터와 참조형 데이터

1. 메모리를 기준으로 다시한번 생각해보는 두 가지 주요 개념

  1. 변수 vs 상수
    1. 변수 : 변수 영역 메모리를 변경할 수 있음
    2. 상수 : 변수 영역 메모리를 변경할 수 없음
  2. 불변하다 vs 불변하지 않다
    1. 불변하다 : 데이터 영역 메모리를 변경할 수 없음
    2. 불변하지 않다 : 데이터 영역 메모리를 변경할 수 있음
    3. 불변값과 불변성(with 기본형 데이터)
// a라는 변수가 abc에서 abcdef가 되는 과정을 통해 불변성을 유추해봅시다!

// 'abc'라는 값이 데이터영역의 @5002라는 주소에 들어갔다고 가정할게요.
var a = 'abc';

// 'def'라는 값이 @5002라는 주소에 추가되는 것이 아니죠!
// @5003에 별도로 'abcdef'라는 값이 생기고 a라는 변수는 @5002 -> @5003
// 즉, "변수 a는 불변하다." 라고 할 수 있습니다.
// 이 때, @5002는 더 이상 사용되지 않기 때문에 가비지컬렉터의 수거 대상이 됩니다.
a = a + 'def';
          1.  

쓸모없어진 데이터는 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