[딥다이브] 001. 변수

seo young park·2021년 12월 21일
1
post-thumbnail

1. 변수란 무엇인가?

  • 변수(variable)
    • 하나의 값을 저장하기 위해 확보한 메모리 공간 자체 또는 그 메모리 공간을 식별하기 위해 붙인 이름.

      — 값의 위치를 가리키는 상징적인 이름.

  • 컴퓨터 - cpu - 연산

  • 컴퓨터-메모리-기억

  • 변수 이름(메모리 공간에 저장된 값을 식별할 수 있는 고유한 이름

  • 변수 값(변수에 저장된 값)

  • 할당(assignment)

    • 변수에 값을 저장하는 것
  • 참조(reference)

    • 변수에 저장된 값을 읽어 들이는 것은
    • 참조를 요청하면,
      엔진은 변수 이름과 매핑된 메모리 주소를 통해 메모리 공간에 접근해서 저장된 값을 반환한다.

2. 식별자

  • 식별자(identifier)
    • 어떤 값을 구별해서 식별할 수 있는 고유한 이름.
    • 값이 아니라 메모리 주소에 붙인 이름.

3. 변수 선언(variable declaration)

  • 변수를 생성하는 것
    값을 저장하기 위해 메모리 공간을 확보하고 변수 이름과 확보된 메모리 공간의 주소를 연ㄴ결해서 값을 저장할 수 있게 준비하는 것
  • 단계
    • 선언 단계: 변수 이름을 등록해서 엔진에 변수의 존재를 알림
    • 초기화 단계: 초기화란, 변수가 선언된 이후 최초로 값을 할당하는 것을 말함. 값을 저장하기 위해 메모리 공간을 확보하고 암묵적으로 undefined를 할당해 초기화함 초기화 단계를 거치지 않으면 확보된 메모리 공간에 다른 어플리케이션에서 사용했던 값(쓰레기 값 garbage value)이 남아 있을 수 있고, 변수 값을 참조하면 쓰레기 값이 나올 수 있음. 💡 초기화 이슈 : 초기화를 reset으로 생각하냐, Initialization으로 생각하냐의 차이는 아닐까. Initialization이란 In [computer programming](https://en.wikipedia.org/wiki/Computer_programming), **initialization** (or initialisation) is the [assignment](https://en.wikipedia.org/wiki/Assignment_(computer_science)) of an initial value for a [data object](https://en.wikipedia.org/wiki/Data_object) or variable. 컴퓨터 프로그래밍에서 초기화는 데이터 오브젝트나 변수의 초기 값 할당을 의미한다.
  • 실행 컨텍스트(execution context)
    • 엔진이 소스코드를 평가하고 실행하기 위한 환경 제공
    • 코드의 실행 결과를 실제로 관리하는 영역
    • 변수 이름과 변수 값은 실행 컨텍스트 내에 키(key), 값(value)형식인 객체로 등록되어 관리.
  • var 키워드의 단점
    • 블록 레벨 스코프를 지원하지 않고 함수레벨 스코프를 지원해서 의도하지 않은 전역변수가 선언됨.
    • 키워드란, 자바스크립트 엔진이 수행할 동작을 규정한 일종의 명령어
  • ReferenceError(참조 에러)
    • 식별자를 통해 값을 참조하려했지만 엔진이 등록된 식별자를 찾을 수 없을 때 발생하는 에러

      const person {
      "name" : "minsu",
      "age" : 21
      }
      console.log(person.last-name); //ReferenceError 11강

4. 변수 선언의 실행 시점과 변수 호이스팅

  • 코드 실행 단계
    • 0.소스코드의 평가과정: 변수선언문을 포함한 모든 선언문을 찾아냄
      1. 런타임: 자바스크립트 코드는 인터프리터에 의해 한 줄씩 순차적으로 실행
    • 변수 호이스팅(variable hoisting): 변수 선언문이 코드의 선두로 끌어올려진 것처럼 동작
console.log(score); // undefined .... 1
var score;//변수 선언문   .... 0

5. 값의 할당

  • 변수에 값을 할당(대입,저장)할 때 할당 연산자'='를 사용
var score; // 변수선언
score = 80; //값의 할당
  • 변수 선언과 값의 할당을 하나의 문으로 단축 표현 가능
var score = 88; 

//단축표현해도 자바스크립트엔진은 변수 선언과 값의 할당을 2개의 문으로 나누어 실행하며
//변수 선언과 값의 할당의 실행시점이 다름.
//변수선언은 0.소스평가과정에 실행되지만 값의 할당은 1.런타임에 실행

// (0.변수 선언...초기화)
console.log(score);// undefined

var score = 80; // (1. 값의 할당...재할당)

console.log(score)// 80 

6. 값의 재할당

  • 변수에 값을 할당할 때 undefined가 저장되어있떤 메모리 공간을 지우고 할당 값 80을 저장하는 것이 아니라 새로운 메모리 공간을 확보하고 할당 값 80을 저장
  • 상수: 단 한 번만 할당할 수 있는 변수
  • 변수: 재할당을 통해 저장된 값을 다른 값으로 변경가능
var score; // undefined  변수 선언 ...0x000000f2
score = 80;  // 80 값의 할당(재할당) ... 0x00001332
score = 90; // 90 값의 재할당 ...0x066f913

//값을 재할당하면 새로운 메모리 공간을 확보하고 그 공간에 숫자 90을 저장
//여기서 undefined와 80은 어떤 식별자와도 연결되어있지 않다.
//불필요한 값은 가비지콜렉터에 의해 메모리에서 자동 해제

7. 식별자 네이밍 규칙

  • 식별자: 어떤 값을 구별해서 식별해낼 수 있는 고유한 이름
    • 특수문자를 제외한 문자, 숫자, 언더스코어(_), 달러 기호($)를 포함할 수 있음
    • 단, 숫자로 시작하는 것은 허용하지 않음.
    • 대소문자를 구분함 (firstname ≠ firstName)
    • 예약어는 식별자로 사용할 수 있음
    • 예약어: 프로그래밍 언어에서 사용되고 있거나 사용될 예정인 단어(break,continue,this 등)
var first-name // 특수문자 포함
var 1st; // 숫자 시작
var this; // 예약어

0개의 댓글