
JavaScript는 매우 유연한 언어이지만, 코드가 길어질수록 변수에 어떤 값이 들어올지 예측하기 어렵다는 단점이 있습니다. TypeScript는 이러한 JavaScript의 상위 집합(Superset)으로, 코드에 타입을 명시하여 실행 전 단계에서 오류를 미리 발견할 수 있게 돕는 언어입니다.
TypeScript 코드는 브라우저나 Node.js 환경에서 직접 실행되지 않습니다. 개발자가 작성한 코드를 JavaScript로 변환(Transpile)하는 과정을 거쳐야 하며, 이 과정에서 타입 검사가 수행됩니다. 결과적으로 우리가 작성하는 타입 정보는 실제 실행되는 코드에는 영향을 주지 않고 개발 단계에서의 안전성을 높이는 역할을 합니다.
가장 기본적인 타입 지정 방법은 변수명 뒤에 콜론(:)을 붙이고 타입을 명시하는 것입니다. JavaScript의 기본 자료형인 string, number, boolean 등을 사용할 수 있습니다.
let userName: string = "홍길동";
let userAge: number = 25;
let isMember: boolean = true;
TypeScript는 똑똑하게도 값을 할당하면 그 값을 보고 타입을 스스로 추론하기도 합니다. 이를 '타입 추론(Type Inference)'이라고 합니다. 위 코드에서 userName에 문자열을 할당하면, 굳이 : string을 쓰지 않아도 TypeScript는 해당 변수를 문자열로 인식합니다. 따라서 중복되는 타입 선언을 줄이고 코드의 가독성을 높일 수 있습니다.
프로젝트를 진행하다 보면 객체 데이터를 다룰 일이 많습니다. 이때 객체의 구조를 정의하기 위해 interface를 자주 사용합니다. 인터페이스를 사용하면 객체가 어떤 속성을 가져야 하는지 명확하게 규정할 수 있습니다.
interface User {
id: number;
name: string;
email?: string; // ?를 붙이면 선택적 속성이 됩니다.
}
const user: User = {
id: 1,
name: "김철수"
};
위 예제에서 email 뒤에 붙은 ?는 해당 속성이 있어도 되고 없어도 된다는 의미입니다. 이렇게 인터페이스를 정의해두면, 나중에 객체의 속성을 잘못 입력하거나 누락했을 때 컴파일러가 바로 경고를 보내 오류를 방지할 수 있습니다.
TypeScript를 처음 시작할 때 흔히 하는 실수 중 하나는 타입 정의가 어렵다는 이유로 any 타입을 남용하는 것입니다. any는 모든 타입을 허용하겠다는 의미로, 사실상 TypeScript의 타입 검사 기능을 끄는 것과 같습니다.
let data: any = "hello";
data = 123; // 오류가 발생하지 않음
any를 사용하면 타입 안전성이 사라지므로, 가능한 unknown 타입을 사용하거나, 데이터의 구조를 명확히 정의하는 것이 좋습니다. 또한 제네릭(Generics)을 활용하면 다양한 타입을 유연하게 처리하면서도 타입 정보를 유지할 수 있습니다.
TypeScript의 타입 시스템은 단순히 코드를 복잡하게 만드는 것이 아니라, 개발자가 의도한 대로 데이터가 흐르는지 확인하는 안전장치입니다. 처음에는 타입을 일일이 지정하는 과정이 번거로울 수 있지만, 프로젝트 규모가 커질수록 타입 정의를 통해 얻는 유지보수의 이점은 매우 큽니다. 가장 먼저 기본 타입을 익히고, 점진적으로 인터페이스를 활용하며 타입 시스템에 익숙해지는 것을 권장합니다.
🤖 이 글은 생성형 AI(Google Gemini)가 주제 선정 → 자료 조사 → 초안 작성 → AI 검수 과정을 거쳐 자동으로 작성했습니다. 사실과 다른 내용이 포함될 수 있으니 참고용으로 확인해 주세요.
| [JavaScript] Uncaught SyntaxError: Invalid regular expression: /+/: Nothing to repeat (0) | 2022.03.22 |
|---|
댓글 영역