예약어(Reserved Word)는 프로그래밍 언어에서 특별한 목적을 위해 미리 예약해둔 단어를 의미한다.
이 단어들은 언어의 문법(Syntax) 구조를 형성하고 특정 기능을 수행하기 위해 사용된다.
때문에 개발자가 변수명이나 함수명 등으로 사용할 수 없다.
const class = "something"; // ❌ class는 예약어
const if = "test"; // ❌ if는 예약어
const const = 5; // ❌ const는 예약어
같은 방식이다. 예약어는 그 자체로 목적을 가진 단어이기 때문에 변수로 설정할 수 없다. 간단히 말하자면 이게 변수인지 예약어인지 판단을 못하게 되는 것이다.
예를 들어, JavaScript에서 'class'는 클래스를 정의하는 데 사용되는 예약어이므로, 'class'라는 이름으로 변수를 만들 수 없다.
📌 주요 특징 및 목적
- 고유한 의미와 기능: 예약어는 해당 언어의 컴파일러(Compiler)나 인터프리터(Interpreter)에게 정해진 명령이나 구조를 알려주는 역할을 한다. 예를 들어, 조건을 나타내는 if, 반복을 나타내는 for, 함수 정의를 나타내는 function이나 def 등이 있다.
- 식별자 사용 불가: 프로그래머는 예약어를 변수 이름, 함수 이름, 클래스 이름 등 **식별자(Identifier)**로 사용할 수 없다. 만약 예약어를 식별자로 사용하려고 하면, 프로그램은 **문법 오류(Syntax Error)**를 발생시킨다.
- 예시: JavaScript에서 let let = 5; 와 같이 코드를 작성하면 오류가 발생한다. 왜냐하면 let은 변수 선언을 위한 예약어이기 때문이다.
- 언어의 핵심 구성 요소: 예약어는 프로그래밍 언어의 기본적인 골격과 규칙을 정의하는 데 필수적이다. 이를 통해 코드의 구조를 명확히 하고, 컴파일러/인터프리터가 코드를 정확하게 해석할 수 있도록 돕는다.
- 언어별 고유성: 예약어의 종류와 개수는 프로그래밍 언어마다 다르다. 예를 들어 int는 Java나 C++에서는 정수 타입을 나타내는 예약어지만, Python에서는 내장 함수 이름일 뿐 예약어는 아니다 (Python에서는 class 같은 것이 예약어이다).
📜 자바스크립트 예약어 목록 (ECMAScript 2023 기준 근사치)
자바스크립트(JavaScript)의 예약어 목록은 ECMAScript 버전, 스트릭트 모드(Strict Mode) 여부, 문맥에 따라 약간씩 다를 수 있다. 아래는 일반적으로 통용되는 예약어 및 관련 키워드 목록이며, 최신 표준과 MDN 문서 등을 기반으로 정리한 것이다.
✅ 현재 사용되는 주요 키워드 (Keywords)
언어의 핵심 문법 구조를 이루는 데 사용되는 단어들이다.
- break
- case
- catch
- class
- const
- continue
- debugger
- default
- delete
- do
- else
- export
- extends
- finally
- for
- function
- if
- import
- in
- instanceof
- let
- new
- return
- super
- switch
- this
- throw
- try
- typeof
- var
- void
- while
- with
- yield (제너레이터 함수 등에서 사용)
⏳ 미래 예약어 (Future Reserved Words) / 스트릭트 모드 예약어
현재는 언어에서 특정 기능을 수행하지 않지만, 향후 버전에서 사용될 가능성이 있어 예약되었거나 스트릭트 모드에서 예약된 단어들이다. 스트릭트 모드가 아닐 때는 식별자로 사용 가능할 수도 있으나, 혼란을 피하기 위해 사용하지 않는 것이 좋다.
- enum
- implements (스트릭트 모드)
- interface (스트릭트 모드)
- package (스트릭트 모드)
- private (스트릭트 모드)
- protected (스트릭트 모드)
- public (스트릭트 모드)
- static (스트릭트 모드)
(참고: let, yield, static 등은 현재 키워드로도 사용되지만, 특정 상황이나 스트릭트 모드에서는 여전히 미래 예약어 목록에 언급되기도 한다.)
enum은 '열거형(Enumeration)'의 약자로, 관련된 상수들의 집합을 정의하는 데 사용되는 데이터 타입이다.
현재 JavaScript에는 enum이 구현되어 있지 않지만, TypeScript에서는 사용 가능하다.
✨ 리터럴 (Literals)
고정된 값을 나타내며, 식별자로 사용할 수 없다.
- true
- false
- null
💡 문맥적 키워드 (Contextual Keywords)
특정 문맥에서만 키워드로 해석되는 단어들이다.
- async (async function 선언 시)
- await (async function 내부 또는 모듈 최상위 레벨)
- get (클래스/객체 리터럴의 getter 함수 정의 시)
- set (클래스/객체 리터럴의 setter 함수 정의 시)
'JavaScript > 개념 조각' 카테고리의 다른 글
크기가 0인 요소도 IntersectionObserver의 대상이 될 수 있나? (0) | 2025.03.31 |
---|---|
✨ JS Intersection Observer의 rootmargin과 threshold (0) | 2025.03.31 |
✨ this 참조 대상 (0) | 2025.03.29 |
✨ 화살표 함수와 일반 함수의 변환 (0) | 2025.03.29 |
Set 생성자 및 add 메서드 동작에 대한 의문사항 (0) | 2025.03.28 |