JavaScript Reserved Words
JavaScript Reserved Words: 예약어와 사용 제한
- *JavaScript 예약어(Reserved Words)**는 언어의 구문 구조에서 특별한 의미를 가지는 단어들로, 변수 이름, 함수 이름, 또는 **식별자(identifier)**로 사용할 수 없습니다. 이러한 예약어를 식별자로 사용하려 하면 **구문 오류(Syntax Error)**가 발생할 수 있습니다.
JavaScript에는 예약어뿐만 아니라, 미래에 사용될 예약어와 ECMAScript 버전에 따라 제한된 예약어도 존재합니다. 이 가이드는 JavaScript의 예약어를 소개하고, 그 의미와 사용 방법을 설명합니다.
1. JavaScript 예약어 목록
다음은 JavaScript에서 예약어로 사용되는 키워드 목록입니다. 이 단어들은 변수, 함수, 객체의 이름으로 사용할 수 없습니다.
1.1. ECMAScript 5 (ES5) 예약어
이 예약어들은 ES5(ECMAScript 5) 표준에서 정의된 키워드들입니다.
- break: 반복문이나
switch
문을 종료합니다. - case:
switch
문에서 사용하여 특정 조건을 처리합니다. - catch:
try...catch
구문에서 오류를 처리할 때 사용됩니다. - class: ES6에서 클래스를 정의할 때 사용됩니다.
- const: 상수를 선언합니다. 재할당이 불가능합니다.
- continue: 반복문을 건너뛰고 다음 반복을 실행합니다.
- debugger: 코드를 중단하고 디버거를 실행할 때 사용됩니다.
- default:
switch
문에서 기본 값을 지정할 때 사용합니다. - delete: 객체의 속성을 삭제할 때 사용됩니다.
- do:
do...while
문에서 반복 실행을 시작할 때 사용됩니다. - else:
if
구문에서 조건이 거짓일 때 실행할 코드를 지정합니다. - enum: 열거형을 정의할 때 사용됩니다. ES6에 포함되지 않았지만 예약어로 유지됩니다.
- export: ES6 모듈 시스템에서 모듈을 내보낼 때 사용됩니다.
- extends: 클래스 상속을 정의할 때 사용됩니다.
- false: 불리언
false
값을 나타냅니다. - finally:
try...catch
구문에서 오류와 관계없이 실행될 코드를 지정합니다. - for: 반복문을 실행할 때 사용됩니다.
- function: 함수를 정의할 때 사용됩니다.
- if: 조건문을 정의할 때 사용됩니다.
- import: ES6 모듈 시스템에서 모듈을 가져올 때 사용됩니다.
- in: 객체 속성을 확인할 때 사용됩니다.
- instanceof: 객체가 특정 클래스의 인스턴스인지 확인할 때 사용됩니다.
- let: 블록 스코프 변수를 선언할 때 사용됩니다.
- new: 생성자를 호출할 때 사용됩니다.
- null: 비어 있는 객체 값을 나타냅니다.
- return: 함수에서 값을 반환할 때 사용됩니다.
- super: 부모 클래스의 생성자를 호출할 때 사용됩니다.
- switch: 여러 조건을 처리할 때 사용됩니다.
- this: 현재 객체를 참조할 때 사용됩니다.
- throw: 사용자 정의 오류를 던질 때 사용됩니다.
- true: 불리언
true
값을 나타냅니다. - try: 오류가 발생할 수 있는 코드를 실행할 때 사용됩니다.
- typeof: 데이터 타입을 확인할 때 사용됩니다.
- var: 변수를 선언할 때 사용됩니다.
- void: 함수가 값을 반환하지 않을 때 사용됩니다.
- while: 조건이 참일 때까지 반복 실행할 때 사용됩니다.
- with: 특정 객체의 속성에 대해 여러 번 접근할 때 사용됩니다. (ES5 이후 비권장)
- yield: 제너레이터 함수에서 값을 반환하고 실행을 중단할 때 사용됩니다.
2. ECMAScript 6 (ES6) 예약어
ES6(ECMAScript 2015)에서 추가된 예약어들은 다음과 같습니다. 이 키워드들은 모듈 시스템과 클래스, 제너레이터와 같은 ES6의 새로운 기능을 지원합니다.
- class: 클래스를 정의할 때 사용됩니다.
- const: 상수를 선언할 때 사용됩니다.
- export: 모듈을 내보낼 때 사용됩니다.
- import: 모듈을 가져올 때 사용됩니다.
- let: 블록 스코프 변수를 선언할 때 사용됩니다.
- super: 부모 클래스의 생성자를 호출할 때 사용됩니다.
- yield: 제너레이터 함수에서 값을 반환하고 중단할 때 사용됩니다.
3. JavaScript의 미래 예약어
- *미래 예약어(future reserved words)**는 현재 JavaScript 표준에서는 사용되지 않지만, 미래에 사용할 가능성이 있는 단어들입니다. 이러한 단어들은 미래의 표준 업데이트에서 키워드로 사용될 수 있으므로, 식별자로 사용하는 것은 피해야 합니다.
3.1. 미래 예약어 목록
- abstract
- boolean
- byte
- char
- double
- final
- float
- goto
- implements
- int
- interface
- long
- native
- package
- private
- protected
- public
- short
- static
- synchronized
- throws
- transient
- volatile
이 단어들은 Java, C++ 등의 다른 언어에서 사용되는 키워드와 유사하며, 미래에 JavaScript에서 도입될 가능성이 있기 때문에 예약되어 있습니다.
4. 엄격 모드(Strict Mode)에서 제한되는 예약어
엄격 모드("use strict";
)에서는 몇 가지 추가적인 예약어들이 있습니다. 엄격 모드는 코드의 실행을
더 엄격하게 해석하고 오류 탐지를 강화하므로, 특정 예약어를 사용하지 못하게 제한합니다.
4.1. 엄격 모드에서 사용이 금지된 예약어
- implements
- interface
- let
- package
- private
- protected
- public
- static
- yield
엄격 모드에서는 위의 예약어를 변수 이름이나 식별자로 사용할 수 없습니다.
5. 잘못된 예약어 사용으로 인한 오류
JavaScript 코드에서 예약어를 식별자로 사용하면 **구문 오류(SyntaxError)**가 발생할 수 있습니다. 예를 들어, 예약어를 변수 이름이나 함수 이름으로 사용하려고 하면, 해당 예약어가 문법적으로 특정 역할을 가지기 때문에 오류가 발생합니다.
5.1. 예시: 예약어를 변수 이름으로 사용한 경우
// 예약어 'const'를 변수 이름으로 사용하려는 경우
const const = 10; // SyntaxError: Unexpected token 'const'
위 코드는 const
가 예약어이기 때문에 변수 이름으로 사용할 수 없어서 오류가 발생합니다.
5.2. 예시: 미래 예약어 사용으로 인한 오류
// 'class'는 ES6에서 예약어로 도입됨
var class = "Math"; // SyntaxError: Unexpected token 'class'
- *
class
*는 ES6 예약어이므로 변수 이름으로 사용할 수 없습니다.
6. 예약어를 피하는 방법
예약어를 변수 이름이나 함수 이름으로 사용할 수 없으므로, 예약어와 겹치지 않도록 이름을 지어야 합니다. 일반적으로 예약어에 의미를 추가하거나 변형을 가하는 방식으로 문제가 발생하지 않게 할 수 있습니다.
6.1. 예시: 예약어를 피한 변수 이름
// 예약어 'class' 대신 'className' 사용
const className = "Math";
위 코드에서는 class
대신 **className
**을 사용하여 예약어 문제를 피했습니다.
7. 식별자 규칙
JavaScript에서 **식별자(identifier)**를 정의할 때는 예약어를 피해야 할 뿐만 아니라, 다음의 규칙을 따라야 합니다.
- 식별자는 문자(a-z, A-Z), 밑줄(
_
), 또는 **달러 기호($
)**로 시작해야 합니다. - 이후에는 숫자도 포함될 수 있습니다.
- JavaScript에서 대소문자를 구분합니다.
- 예약어는 사용할 수 없습니다.
7.1. 예시: 올바른 식별자
let _counter = 1;
let $element = document.getElementById('myElement');
let user
Name = 'Alice';
요약
- JavaScript에는 언어 구문에 사용되는 예약어가 있으며, 이러한 단어들은 식별자로 사용할 수 없습니다.
let
,const
,class
,function
등의 예약어는 변수 이름이나 함수 이름으로 사용할 수 없습니다.- 미래 예약어와 **엄격 모드(Strict Mode)**에서 제한된 단어도 사용에 주의해야 합니다.
- 예약어를 피하려면 의미를 추가하거나 변형한 변수 이름을 사용하는 것이 좋습니다.
JavaScript의 예약어와 식별자 규칙을 잘 이해하고 사용하면 문법 오류를 피하고, 더 명확하고 유지보수하기 쉬운 코드를 작성할 수 있습니다.