01. 변수(variable)
- 프로그래밍 언어에서 데이터를 관리하기 위한 핵심 개념
- 메모리(memory) = 셀(memory cell)의 집합
- 셀 하나의 크기 = 1 byte
- 의미: 하나의 값을 저장하기 위해 확보한 메모리 공간 자체 or 그 메모리 공간을 식별하기 위해 붙인 이름
// 하나의 값 저장
var userId = 1;
var userName = 'KKK';
// 객체나 배열(자료구조)를 사용하면 여러개의 값을 하나로 그룹화하여 하나의 값처럼 사용할 수 있음
var user = {id:1, name:'KKK'};
var users = [
{id:1, name:'KKK'},
{id:2, name:'LLL'}
];
02. 식별자(identifier)
- 의미: 어떤 값을 구별해서 식별할 수 있는 고유한 이름 (=변수)
- 메모리의 주소를 기억함
03. 변수 선언(variable declaration)
- 변수를 사용하기 위해 반드시 선행되어야 함
- JS에서 선언 키워드: var, let, const
- var 키워드의 문제점
- ES5 → var, ES6 → let, const
- ES6: 하위 호환성을 유지(즉, var도 사용)하면서 ES5 기반 위에 새로운 기능을 추가 → ES5의 상위 집합
- undifined: JS에서 제공하는 원시 값
- JS 엔진에서의 변수 선언 단계
- 선언 단계: 등록을 통해 변수의 존재를 알림
- 초기화 단계: 값을 저장하기 위한 메모리 공간을 확보하고 암묵적으로 undifined를 할당해 초기화함
- var 키워드는 선언과 동시에 초기화 단계가 같이 진행
- 초기화 단계가 필요한 이유: 이전 애플리케이션에서 사용했던 값이 남아 쓰레기 값(garbage value)를 참조할 수도 있기 때문
04. 변수 선언의 실행 시점과 변수 호이스팅
console.log(name); //변수 사용 코드
var name; //변수 선언문
- JS에서는 변수 선언문보다 변수를 참조하는 코드가 앞에 있어도 참조 에러가 나지 않음
- 인터프리터 방식으로 한 줄씩 실행되므로 에러가 나야하는 것이 아닌가? → 아님
- 변수 선언이 소스 코드가 한 줄씩 순차적으로 실행되는 시점(런타임) 이전 단계에 실행됨
- JS 엔진의 소스코드 실행 순서
- 소스코드의 평가 과정을 통해 소스코드 실행을 위한 준비
- 이 때 변수 선언문, 함수 선언문 등 모든 선언문을 소스코드에서 찾아내 먼저 실행
- 모든 선언문을 제외한 소스 코드를 한 줄씩 순차적으로 실행
- 소스코드의 평가 과정을 통해 소스코드 실행을 위한 준비
- 변수 호이스팅(variable hoisting): 변수 선언문이 코드의 선두로 끌어 올려진 것처럼 동작하는 JS의 특징
05. 값의 할당
- 할당 방법: 대입 연산자(=) 사용
- 주의할 점: 변수 선언과 값의 할당 실행 시점이 다름
- 변수 선언: 런타임(순차적) 이전
- 값의 할당: 런타임(인터프리터)
06. 값의 재할당
- 의미: 현재 변수에 저장된 값을 버리고 새로운 값을 저장하는 것
- 상수(constant): 변수에 저장된 값을 변경할 수 없음(재할당 X) → 키워드 const 사용
- 언매니지드 언어(unmanaged language) vs 매니지드 언어(managed language)
- 언매니지드 언어: C언어와 같이 개발자가 명시적으로 메모리를 할당하고 해제 가능(malloc(), free())한 저수준 메모리 제어 기능 제공
- 매니지드 언어: 메모리 관리 기능을 언어 차원에서 담당(가비지 컬렉터)
- 성능은 언매니지드 언어, 생산성은 매니지드 언어가
07. 식별자 네이밍
- 규칙
- 사용 가능: 특수 문자를 제외한 문자, 숫자, 언더스코어(_), 달러 기호($)
- 숫자로 시작 X
- 예약어를 식별자로 사용 X
'JavaScript' 카테고리의 다른 글
[JavaScript] 표현식과 문 (1) | 2025.04.10 |
---|---|
[JavaScript] let, const 키워드와 블록 레벨 스코프 (0) | 2025.04.10 |