본문 바로가기
JavaScript/모던자바스크립트 Deep Dive 스터디

[모던JS DeepDive] 4장 변수

by 복숭아 우유씨 2023. 1. 3.

변수의 필요성과 정의

프로그래밍을 통해 만든 애플리케이션은 데이터를 입출력한다. 그리고 변수는 이 데이터를 관리하기 위한 핵심 개념이다.

컴퓨터가 데이터를 다루는 방법은 데이터를 메모리에 기억하고, CPU로 연산하여, 결과값을 메모리에 기억해서 출력하게 된다.

 

메모리란?

- 데이터를 저장할 수 있는 메모리셀의 집합체

변수의 필요성

- 메모리 주소를 통한 직접 접근의 위험성 및 어려움으로 변수가 필요함

  -> 직접 접근시, 치명적인 오류 발생 가능성 있음, 메모리 주소는 코드 실행될 떄 상황에 따라 임의 결정되므로 계속 변경된다.

- 즉, 값을 메모리에 저장하고 재사용하기 위해 변수가 필요해졌다.

 

변수의 정의

- 하나의 값을 저장하기 위해 확보한 메모리 공간 자체 또는 그 메모리 공간을 식별하기 위해 붙인 이름

즉, 값을 저장하고 참조하는 메커니즘으로 값의 위치를 가리키는 상징적인 이름이다. 컴파일러나 인터프리터에 의해 메모리 주소로 치환되어 실행되기에 메모리 주소를 직접 사용하지 않고 안전하게 값에 접근할 수 있게 해준다.

* 여러값을 저장하기 위해서는 변수를 여러개 사용하거나, 그룹화해주는 자료구조(배열, 객체 등)을 사용해야 한다.

변수이름(변수명) : 사람이 이해할 수 있는 언어로 메모리 공간에 붙인 상징적인 이름

변수 값 : 변수에 저장된 값

할당(assignment, 대입, 저장) : 변수에 값을 저장하는 것

참조(reference) : 변수에 저장된 값을 읽어 들이는 것

- 변수 사용 과정: 변수 이름으로 참조 요청 → 변수이름과 매핑된 메모리 주소를 통해 메모리 공간에 접근 → 저장된 값을 반환

 

식별자

- 식별자는 어떤 값을 구별해서 식별하게 해주는 고유한 이름으로, 변수이름을 식별자(Identifier)라고도 한다.

- 메모리 주소와 매핑 관계를 맺고 있으며,이 매핑 정보도 메모리에 저장된다.

- 값이 아닌 메모리 주소를 기억한다. 

- 변수, 함수, 클래스 등의 이름은 모두 식별자이다.

- 네이밍 규칙을 준수해야 하며, 선언을 통해 식별자의 존재를 알린다.

 

변수 선언

변수 선언이란?

- 변수를 생성하는 것

- 과정: 메모리 공간을 확보(allocate) → 변수 이름과 메모리 주소를 연결(name binding) → 값을 저장할 수 있게 준비

- 확보된 메모리 공간은 해제전까지 사용할 수 없도록 보호되어 있음

- 변수 사용을 위해서는 반드시 선언이 필요함.

- 변수 선언 키워드 : var, let, const

 

var 키워드

: 뒤에 오는 변수 이름으로 새로운 변수를 선언할 것을 지시하는 키워드(일종의 명령어)

 

변수 선언 및 초기화

- 변수 선언으로 메모리 공간이 확보되면, 그 공간은 초기화 단계를 통해 undefined를 암묵적으로 할당하여 초기화한다.

즉 선언단계에서 이름을 등록하여 자바스크립트 엔진에 변수의 존재를 알리고, 초기화 단계에서 메모리 공간을 확보하고 undefined를 할당하여 초기화한다.

- var 키워드의 경우 선언단계와 초기화 단계가 동시에 이뤄진다.

- 초기화가 없다면, 쓰레기 값(garbage value)가 남아 있을 수 있다.

- Reference Error(참조 에러): 선언하지 않은 식별자에 접근할 경우 발생하는 에러 (식별자를 찾을 수 없을 때)

 

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

변수 선언의 실행시점

즉, 변수 선언의 위치와 상관없이 어디서나 변수를 참조할 수 있다. 

이러한 특징을 변수 호이스팅이라고 하며, var, let, const, function, function*, class 키워드를 사용해서 선언하는 모든 식별자는 호이스팅 된다.

 

값의 할당 및 재할당

- 할당 연산자 (=)를 사용하여 우변의 값을 좌변의 변수에 할당함.

- 선언과 할당문을 하나의 문으로 단축 표현할 수도 있으나, 실행시는 각각 나누어 실행된다.

 

선언과 할당의 실행 시점

순서: 선언 → undefined로 초기화(undefined가 할당됨) → 새로운 메모리 공간 확보하여 값을 할당함

 

재할당: 이미 값이 할당된 변수에 새로운 값을 다시 할당하는 것

- 변수는 값을 재할당 할 수 있으며, 변경할 수 없는 것은 상수이다.

- 재할당할 경우, 기존의 메모리 공간을 지우는 것이 아니라 새로운 공간을 확보하여 그곳에 할당하는 것이다.

- 이때 어디에서도 사용하지 않는 메모리는 가비지 콜렉터에 의해 해제(release)된다.

식별자 네이밍 규칙

1) 특수 문자를 제외한 문자, 숫자, 언더스코어(_), 달러 기호($) 포함 가능

2) 단 숫자로 시작하는 것은 안됨

3) 예약어는 사용 불가 (예약어: 프로그래밍 언어에서 이미 사용되고 있거나 사용될 예정인 단어)

 

* 기타 권장/주의 사항

- 대소문자 구별함

- 의미가 명확한 네이밍 하기

- 네이밍 컨벤션 사용하기 (변수나 함수 이름은 카멜케이스, 생성자 함수나 클래스 이름은 파스칼 케이스를 주로 사용)

 

 

 

 


References...

1) 모던 자바스크립트 Deep Dive, 이웅모, 위키북스

2) https://poiemaweb.com/

 
 

댓글