JavaScript

[JavaScript] 변수

beginner-in-coding 2025. 4. 10. 13:41

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 엔진의 소스코드 실행 순서
    1. 소스코드의 평가 과정을 통해 소스코드 실행을 위한 준비
      • 이 때 변수 선언문, 함수 선언문 등 모든 선언문을 소스코드에서 찾아내 먼저 실행
    2. 모든 선언문을 제외한 소스 코드를 한 줄씩 순차적으로 실행
  • 변수 호이스팅(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