Chapter 4. 변수

깡통·2024년 2월 6일
0
  • 컴퓨터는 사람을 모델로 디자인되었음. 그래서 사람과 유사하게 동작함. 그래서 자바 스크립트도 사람과 유사하게 동작함.

  • 자바스크립트는 개발자의 직접적인 메모리 제어를 허용하지 않음.

    • 컴퓨터에서 값은 메모리 상의 임의의 위치(메모리 주소)에 기억(저장) 됨.
    • 근데 메모리 주소를 통해 값에 직접 접근해 조작하면 운영체제가 사용하고 있는 메모리 주소에 있던 값을 변경해 버릴 수도 있음.
    • 그리고 동일한 코드를 실행해도, 실행할 때마다 같은 값이라도 메모리 주소가 바뀜

< 변수 >

  • 그래서 변수가 태어남

  • 변수

    • 변수는 하나의 값을 저장하기 위해 확보한 메모리 공간 자체, 또는 그 메모리 공간을 식별하기 위해 붙인 이름임.
    • 변수 이름과 확보된 메모리 공간의 주소가 연결되어 값이 저장될 수 있게 됨.
    • 그래서 변수를 통해 값이 저장된 메모리 위치가 정확하게 명시됨. 한마디로 변수는 GPS임.
    • 변수를 구성하는 요소는 다음과 같음.
      • 변수 이름(변수명, 식별자)
      • 변수 값 << 할당/대입/저장 vs 참조(변수에 저장된 값을 읽어 들이는 것)
    • 변수를 사용하려면 반드시 변수를 선언해야 함
      • 선언하지 않은, 혹은 선언하기 전인 식별자에 접근하면 ReferenceError가 발생함
    • 소스코드 평가 단계에서 변수 선언은 호이스팅 됨(가장 먼저 실행됨)
    • 소스코드 평가 단계 이후 소스코드 실행(런타임) 단계에 선언된 변수에 값이 할당됨
      Javascript
      					   console.log(x); //undefined
                            var x = 25;
                        
                            
                            >>> var x;
                                    x = undefined;
                                console.log(x); //undefined
                                x = 25; (여기서 x에 25가 재할당 됨)
                                console.log(x); //25
       
  • 식별자
    • 식별자는 값이 아니라 메모리 주소를 기억하고 있음
    • let x = 35, let y = "국밥"

  • var
    • 소스코드 평가 단계에서 변수 선언과 (암묵적)초기화가 동시에 진행됨
    • => undefined가 할당됨
    • 참고로 초기화 안하면 변수가 확보한 메모리 공간에 이전에 다른 어플에서 사용하던 값이 남아 있을 수 있음
      = 쓰레기 값
    • var의 경우 위의 예제처럼 x에 25를 재할당되면 (원시값의 기준) 기존에 undefined가 저장돼 있던 메모리 공간의 'undefined'를 삭제하고 그 자리에 25를 재할당 하는 것이 아니라 새로운 메모리 주소에 25를 저장하고 그 주소를 변수 x와 연결함.
      • undefined가 저장된 메모리 공간은 이제 참조하는 곳이 없어서 언젠가 가비지 콜렉터가 분리수거함
profile
코딩하러 온 사람입니다.

0개의 댓글