변수란 무엇인가?

모든 어플리케이션은 데이터를 다룬다. 그리고 이 데이터를 다룰 때 변수는 임시 저장소 역할을 한다.

컴퓨터의 데이터 저장 방식

컴퓨터는 데이터를 저장할 때 메모리라는 저장 공간을 사용한다. 메모리는 마치 우편함이 늘어선 것처럼 수많은 작은 저장 공간들로 이루어져 있는데, 이 각각의 저장 공간을 메모리 셀(Memory Cell)이라고 한다. 하나의 메모리 셀에는 하나의 데이터가 저장되며, 각 메모리 셀은 우편함 번호처럼 고유한 위치 번호인 메모리 주소(Memory Address)를 가지고 있다.

변수를 사용하는 이유

데이터를 다루기 위해서는 메모리 주소를 사용해야 하는데, 개발자가 이를 직접 다루는 것은 너무 어렵고 실수하기 쉽다. 그래서 생겨난 것이 바로 변수다.

변수는 16진수로 이루어진 메모리 주소 대신 개발자가 붙인 이름을 통해 데이터를 다룰 수 있게 도와주는 도구이다.

변수와 관련된 용어

변수(Variable) 이름: 메모리에 저장된 데이터를 식별하는 고유한 이름
변수 값: 변수(메모리)에 저장된 값
할당(Assignment): 변수에 데이터를 저장하는 것
참조(Reference): 변수에 저장된 값을 읽어들이는 것

그리고 변수는 데이터가 저장된 메모리 공간, 또는 그 메모리 공간을 식별하기 위해 붙인 이름을 뜻한다.

식별자

식별자(Identifier)는 어떤 값을 구별해서 식별할 수 있는 고유한 이름을 뜻한다. 즉, 사용자가 이름을 붙인 변수와 함수, 클래스 등의 이름은 모두가 식별자다.

이러한 식별자의 이름을 지을 때는 네이밍 규칙을 지켜야 하며 식별자를 사용하기 위해서는 선언(Declaration)을 통해 자바스크립트 엔진에 식별자의 존재를 알려야 한다.

변수 선언

변수 선언이란 메모리 공간을 확보하고 변수 이름과 메모리 주소를 연결하는 것이다. 그리고 변수를 선언할 때 사용하는 키워드는 var, let, const가 있다.

자바스크립트 엔진은 변수 선언을 다음 2단계에 거쳐 수행한다.

선언 단계: 변수 이름을 등록해서 자바스크립트 엔진에 변수의 존재를 알린다
초기화 단계: 값을 저장하기 위해 메모리 공간을 확보하고 암묵적으로 undefined를 할당해 초기화한다.

변수 선언과정에서 초기화를 거치는 이유는 메모리 공간에 이전에 사용한 데이터가 남아있을 수 있기 때문이다.

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

변수 선언은 자바스크립트 엔진이 코드를 실행하는 과정 중 빌드타임 단계에서 실행된다. 이 단계에서 선언과 초기화가 이루어지는데, 이를 변수 호이스팅(Variable Hoisting)이라고 한다.

변수 선언은 데이터를 저장할 공간을 미리 계획해두는 것에 가까우며 실제로 데이터가 메모리 공간에 할당되지는 않는다.

값의 할당

선언된 변수가 메모리 공간에 할당되고 변수에 값이 할당되는 작업은 런타임 과정에서 이루어진다.

값의 재할당

이미 값이 할당된 변수에 새로운 값을 할당하면 어떻게 될까? 우선 const 키워드를 사용해서 선언한 변수는 ES6 규칙에 의해 상수로 간주되므로 재할당이 금지된다. 하지만 var과 let은 재할당이 가능하다.

변수를 통해 number 타입인 데이터를 재할당하면 변수가 가리키는 메모리 주소가 변경된다. 그리고 이전의 메모리 공간은 가비지 콜렉터에 의해 메모리 공간에서 자동으로 해제된다.

단, 기존에 할당되어있던 데이터 타입이 참조 타입이고 재할당으로 내부 값만 수정하는 경우에는 메모리 주소가 그대로 유지된다.

식별자 네이밍 규칙

  • 식별자는 문자, 숫자, 언더스코어(_) 달러 기호($)를 포함할 수 있다.

  • 식별자는 숫자로 시작할 수 없다.

  • 예약어는 식별자로 사용할 수 없다.

  • 권장사항:
    - 변수 선언을 하나의 문에서 여러 개를 한번에 선언하지 않는다.

    • 영어가 아닌 다른 유니코드 문자(한글, 일본어 등)를 사용하지 않는다.
    • 변수 이름은 존재 목적을 쉽게 이해할 수 있게 명명해야 한다.
    • 하나 이상의 영단어로 이루어진 변수를 선언할 때는 네이밍 컨벤션을 지켜야 한다.

네이밍 컨벤션(Naming Convention): 하나 이상의 영어 단어로 이루어진 변수명을 가독성 좋게 구분하기 위해 규정한 명명 규칙

  • 카멜 케이스(Camel Case): 예) let variableName
  • 스네이크 케이스(Snake Case): 예) variable_name
  • 파스칼 케이스(Pascal Case): 예) VariableName

네이밍 컨벤션은 이 외에도 헝가리안 케이스(typeHungarianCase)와 같은 여러 규칙들이 존재한다.

profile
개발 공부 내용을 포스팅 중입니다.

0개의 댓글