DeepDive Chapter 04 변수

김준표·2023년 5월 25일
0

DeepDive

목록 보기
1/2
post-thumbnail

변수

  • 하나의 값을 저장하기 위해 확보한 메모리 공간 자체 or 메모리 공간을 식별하기 위한 이름
  • 변수는 식별자라는 이름으로도 불린다.
  • 변수(식별자)는 할당된 값을 가지는게 아니라 메모리 주소를 가진다.

변수의 선언 과정 요약

키워드 + 변수명 작성 ⇒ 메모리 공간 주소 할당 ⇒ 할당된 메모리의 이름을 변수명으로 등록 ⇒ 메모리 공간에 Undefined 할당

console.log(score) // ??

var score; // 변수 선언

일반적인 프로그래밍 언어라면 참조 오류가 발생해야 하지만, JS는 평가라는 과정이 있기 때문에 미리 코드에서 변수 선언을 포함한 모든 선언문들을 먼저 실행한 후(호이스팅), 남은 소스코드들을 한 줄 씩 처리한다.


호이스팅 변수 초기화

  • var 변수는 호이스팅 시, Undefined로 초기화된다.
  • let, const 변수는 호이스팅 시, 초기화가 되지 않는다.(즉, var처럼 호이스팅은 되지만 참조오류가 발생한다.)

변수 할당

변수에 새로운 값을 할당할 때 기존 메모리 주소를 버리고 새로운 메모리 공간을 할당하고 값을 저장한다.

기존에 할당된 메모리 공간에는 값이 남아있지만 어떤 식별자와도 연결되어 있지 않고, 가비지 콜렉터에 의해 메모리에서 자동으로 해제된다.


변수 네이밍 규칙

변수(식별자)의 이름을 선언할 때는 네이밍 규칙을 준수하여 만들어야 한다.

  • 변수는 특수문자를 제외한 문자, 숫자, 언더바, 달러 기호를 포함할 수 있다.
  • 변수의 시작 문자는 특수문자를 제외한 문자, 언더바, 달러 기호만 가능하다.
    숫자로 변수를 시작할 수 없다.
  • 예약어는 변수로 사용할 수 없다.
    (ex. await, if, return 등)
  • 변수의 이름은 대,소문자를 구별하기 때문에 문자 하나만 차이가 나더라도 다른 변수로 인식된다.
  • 변수의 이름을 선언할 때는 한 눈에 파악할 수 있는 이름으로 선언해야 한다.
    (ex. x, y, i 등 의미가 불분명한 변수는 지양해야 한다.)
  • camelCase, snake_case, PascalCase, typeHungarianCase 등 네이밍 컨벤션을 정하여 코드를 구성해야 한다.

단어

실행 컨텍스트 : JS 엔진이 소스코드를 평가하고 실행하기 위해 필요한 환경을 제공하고 코드의 실행 결과를 관리하는 영역이다.
garbage value : 초기화가 되지 않아 이전 애플리케이션에서 사용했던 의도하지 않은 값
호이스팅 : 인터프리터가 선언문이 있는 변수와 함수의 메모리 공간을 런타임 이전에 미리 할당하는 것
가비지 콜렉터 : 할당된 메모리 공간을 주기적으로 검사하여 더 이상 사용되지 않는 메모리를 해제하는 기능
언매니지드 언어 : 개발자가 명시적으로 메모리를 할당하고 해제할 수 있는 언어
매니지드 언어 : 개발자가 명시적으로 메모리를 할당하고 해제할 수 없는 언어
ReferenceError(참조 에러) : 현재 범위에서 존재하지 않거나 초기화되지 않은 변수를 참조했을 때 발생하는 에러

profile
프론트엔드 개발자 | 문제가 있는 내용이 있다면 댓글로 알려주세요.

0개의 댓글