타입스크립트 예약어 중에 식별자(변수명, 함수명 등)로 사용할 수 있는 예약어가 있다?

예약어란 무엇인가?

예약어란 프로그래밍 언어에서 특별한 의미를 가지고 있어서, 식별자로 사용할 수 없는 단어를 말한다. 예를 들어, JavaScript에서 let, if, else, return 등은 모두 예약어이다. 따라서 이러한 단어들을 변수 이름 등으로 사용할 수 없다.

타입스크립트에서 예약어를 어떻게 처리할까?

타입스크립트에서도 JavaScript와 마찬가지로 예약어를 식별자로 사용할 수 없다. 타입스크립트 컴파일러는 예약어를 사용하는 코드를 발견하면, 컴파일을 실패시킨다. 모든 예약어를 실패처리하는 것은 아니고 TypeScript는 엄격한 모드(strict mode)유무에 따라 일부 예약어를 더욱 엄격하게 처리한다. 이는 가독성과 유지보수성을 높이기 위한 목적으로 도입되었다.

예약어 종류

타입스크립트에서 예약어는 Reserved words, Contextual keywords의 종류로 나눌 수 있다.

  • Reserved words: 언제나 예약어로 처리된다.
  • Contextual keywords: 특정 컨텍스트에서만 예약어로 처리된다.

Reserved words

Reserved words는 변수명, 함수명, 클래스명 등의 이름으로 사용할 수 없는 단어다. 대표적인 예시로는 const, let, class, enum, if, else, while, for 등이 있으며 자세한 내용은 MDN에서 확인 가능하다.

let const = "example"; // 오류 발생

function while() { // 오류 발생
  return "example";
}

Contextual keywords

Contextual keywords는 strict mode와 관계없이 예약어로 취급되는 것이 아니라, 특정 문맥에서만 예약어로 취급되는 단어들이다. Contextual keywords 종류는 다음과 같다.

anybooleanconstructor
declaregetmodeul
requirenumberset
stringsymboltype
fromofasync/await
// 타입스크립트에서의 타입 선언을 위한 'type'과 식별자로서의 type
type ABC = 'A' | 'B' | 'C';

let type = 'EXAMPLE'; // 컴파일 에러 없음
// number식별자와 그 타입, 그리고 interface의 식별자로 사용될 수 없는 number
let number:number = 10; // 컴파일 에러 없음

interface number { // 컴파일 에러
  /* ... */
}

예를 들어, async와 await는 ECMAScript 2017부터 추가된 개념으로, 일반적인 식별자로 사용 가능하지만, 특정 문맥에서는 예약어로 취급된다.

let async = "example"; // 컴파일 에러가 발생하지 않음

async function fetchData() { // 예약어로서 동작
  // ...
}

let obj = {
  async: true, // 컴파일 에러 없음
  await: false // 컴파일 에러 없음
};

식별자로 사용 가능한 일부 예약어들, 하지만 가독성과 유지보수를 위해 사용을 자제하는 이유와 주의점은?

Strict mode에서도 예약어로 취급되지 않는 일부 단어들이 있기 때문에, 이를 사용하는 것은 가능하다. 하지만 가독성과 유지보수 측면에서는 권장하고 싶지는 않다. 다른 개발자가 코드를 이해하기 어려워지고, 예상치 못한 오류가 발생할 수 있기 때문이다. 그럼에도 불구하고 예약어를 식별자로 사용해야 하는 경우에는 어떻게 해야 할까?

  1. 첫 번째 방법은 예약어를 다른 단어로 대체하는 것이다.
    너무나도 당연한 말이지만 이것이 가장 권장되는 방법이다. 예를 들어, ‘type’ 대신 ‘kind’와 같은 단어를 사용할 수 있다. 이 방법은 코드의 가독성을 높이고 예약어를 사용하지 않기 때문에 좋은 방법이다.

  2. 두 번째 방법은 이름 앞 혹은 뒤에 언더스코어(_)를 붙이는 것이다. 이 방법은 예약어와 동일한 이름을 사용하는 것을 방지하기 위해 사용된다.

let _type = "example";
console.log(_type);

하지만 언더스코어를 사용하는 방법은 예약어와 이름이 유사한 변수가 많아질수록 가독성이 떨어지므로, 가능한한 다른 이름을 사용하는 것이 좋겠다. 위의 방법 중 어떤 것을 선택할지는 상황에 따라 다르다.



쿠팡 파트너스 활동을 통해 일정액의 커미션을 제공받을 수 있습니다.