변수란?
- 메모리 공간에 저장된 값을 식별할 수 있는 고유한 이름
- 값을 메모리에 저장하고 재사용할 수 있게함
- 변수에 값을 저장하는 것을 할당(대입, 저장)
- 변수에 저장된 값을 읽어들이는 것을 참조
컴퓨터가 데이터를 저장하는 방법
컴퓨터는 CPU를 사용해 연산하고 메모리를 사용해 데이터를 기억하는데, 메모리는 데이터를 저장할 수 있는 메모리 셀의 집합체로 각 셀은 고유한 메모리 주소를 가짐
메모리 주소로 값에 접근하기
- 메모리주소를 통해 값에 직접 접근하는 것은 치명적 오류를 발생시킬 가능성이 매우 높은 위험한 일이므로 자바스크립트는 개발자의 직접적인 메모리 제어를 허용하지 않음
- 또한 동일한 컴퓨터에서 동일한 코드를 실행해도 코드가 실행될 때 마다 값이 저장될 메모리 주소는 변경되므로 메모리 주소를 통해 값에 직접 접근하려는 시도는 올바른 방법이 아님
변수로 값에 접근하기
- 변수는 프로그래밍언어의 컴파일러 또는 인터프리터에의해 값이 저장된 메모리 공간의 주소로 치환되어 실행되므로 개발자가 변수를 통해 안전하게 값에 접근할 수 있게함
변수 선언
- 변수를 생성하는 것
- 값을 저장하기 위한 메모리 공간을 확보하고 변수이름과 확보된 메모리 공간의 주소를 연결하여 값을 저장할 수 있도록 준비함
- var, let, const 키워드를 사용
자바스크립트 엔진은 변수 선언을 2단계에 걸쳐 수행
1. 선언단계
변수 이름을 등록해서 자바스크립트 엔진에 변수의 존재를 알림
2. 초기화 단계
- 값을 저장하기 위한 메모리 공간을 확보하고 암묵적으로 undefined를 할당해 초기화
- 초기화란 변수가 선언된 이후 최초로 값을 할당하는 것을 의미함
변수 호이스팅
- 변수 선언문이 코드의 선두로 끌어올려진것 처럼 동작하는 자바스크립트 고유의 특징을 변수 호이스팅이라고 함
변수선언과 할당
- 변수선언을 포함한 모든 선언문(변수 선언문, 함수 선언문)은 런타임 이전에 소스코드평가를 거치며 실행되며, 이 과정이 끝나면 선언문을 제외하고 런타임이 실행됨
- 자바스크립트 엔진은 변수선언의 위치에 상관없이 변수선언을 다른 코드보다 먼저 실행함 => 변수 호이스팅
- 값의 할당은 런타임에 실행됨
값의 재할당
- 현재 변수에 저장된 값을 버리고 새로운 값을 저장하는 것
재할당 값을 저장하는 방식
- 변수에 값을 재할당하면 기존의 메모리공간을 지우고 그 공간에 재할당값을 새롭게 저장하는 것이 아니라 새로운 메모리 공간을 확보하고 그 메모리공간에 재할당값을 저장함
- 이전 값은 어떠한 식별자와도 연결되어있지않은 불필요한 값이되며 가비지 콜렉터에 의해 메모리에서 자동해제됨
- 가비지 콜렉터의 실행 시점은 예측할 수 없음
가비지 콜렉터
- 가비지 콜렉터는 메모리공간을 주기적으로 검사하여 더이상 사용되지않는 메모리(어떠한 식별자도 참조하지 않는 메모리공간)를 해제하는 기능
- 메모리 누수를 방지함
식별자 네이밍 규칙
- 문자, 숫자, 언더스코어(_), 달러기호($) 사용가능
- 숫자로 시작할 수 없음
- 예약어 사용불가능
- 대소문자를 구분
- 변수의 존재 목적을 쉽게 이해할 수 있도록 작성해야함
- 변수, 함수 이름 => 카멜케이스 ex) firstName
- 생성자 함수, 클래스 이름 => 파스칼케이스 ex) FirstName