TypeScript
1. JavaScript만 사용하는 것과 비교해 TypeScript를 사용하는 이유에 대해 설명해주세요.
- TypeScript를 사용하는 이유는 정적 타입 검사를 통해 코드의 안정성과 유지보수성을 높일 수 있기 때문입니다. JavaScript는 동적 타입 언어이기 때문에 타입 오류가 실행 중에 발견될 수 있지만, TypeScript는 컴파일 단계에서 타입을 체크해 런타임 오류를 사전에 방지할 수 있습니다. 또한 자동완성, 타입 추론, 인터페이스, 제네릭 같은 기능을 제공해 협업과 대규모 프로젝트에서 코드 품질과 생산성을 크게 높여줍니다. 즉, TypeScript는 JavaScript의 유연함을 유지하면서도 더 안전하고 예측 가능한 개발 환경을 만들어주는 언어입니다.
2. TypeScript의 동작 원리에 대해 설명해주세요.
- TypeScript는 코드 실행 전에 컴파일 단계에서 타입을 정적으로 검사합니다. 변수나 함수, 객체 구조가 타입에 맞게 사용되었는지 확인하고, 문제가 있으면 컴파일 시점에 오류를 알려줍니다. 이후 TypeScript 컴파일러(tsc)가 타입 정보를 모두 제거하고 순수 JavaScript 코드로 변환합니다.
즉, 타입은 개발 단계에서만 존재하고, 실제 실행은 브라우저나 Node.js에서 JavaScript로 이루어집니다. 이 과정 덕분에 런타임 오류를 사전에 방지할 수 있고, 타입 추론 및 도구 지원을 통해 개발 생산성과 유지보수성이 향상됩니다.
3. TypeScript를 사용했을 때 얻을 수 있는 장점은 무엇인가요?
- TypeScript를 사용하면 첫째, 정적 타입 검사를 통해 런타임 에러를 미리 방지할 수 있습니다. 코드를 실행하기 전에 타입 오류를 잡아내기 때문에 안정성이 높습니다. 두번쨰, 자동완성과 타입 추론 덕분에 개발자가 의도한 데이터 구조를 명확히 파악할 수 있어 개발 효율이 올라갑니다. 세번째, 리팩토링과 협업이 쉬워집니다. 타입 정의 덕분에 코드 변경시 영향 범위를 쉽게 파악할 수 있고 다른 개발자들과의 협업 시 의사소통 비용이 줄어듭니다. 즉 TypeScript는 안정성, 유지보수성, 생산성을 모두 향상시켜주는 도구입니다.
4. TypeScript의 인터페이스와 타입 별칭의 차이점은 무엇인가요?
- 인터페이스와 타입 별칭은 모두 객체의 구조나 타입을 정의할 때 사용되지만 확장서과 표현 범위에서 차이가 있습니다. 먼저 인터페이스는 주로 객체의 구조를 정의하고 확장하기 위한 용도로 사용됩니다. 여러 인터페이스를 extends로 상속할 수 있고, 동일한 이름으로 여러번 선언해도 자동으로 병이 가능합니다. 반면 타입 별치은 객체 뿐 아니라 유니언, 인터섹션, 기본 타입 등 더 다양한 타입 표현을 지원합니다. 하지만 이름이 같은 type을 중복 선언할 수 없고 인터페이스처럼 선언 병합은 불가능합니다. 즉 인터페이스는 객체의 구조를 정의하고 확장할 때 적합하고 타입 별칭은 여러 타입을 조합하거나 복잡한 타입 표현이 필요할 때 적합합니다.
5. 제네릭을 사용해야하는 이유를 설명해주세요.
- 제네릭을 사용하는 이유는 유연하면서도 타입 안전한 코드를 재사용하기 위해서입니다. 일반적으로 함수를 만들 때 타입을 고정하면 특정 타입에만 사용할 수 있고, any를 사용하면 타입 정보가 사라져 타입 안정성이 떨어집니다. 제네릭은 타입을 파라미터처럼 전달받아 여러 타입을 지원하면서도
컴파일 단계에서 타입 체크가 가능해 오류를 예방할 수 있습니다. 즉, 제네릭을 통해 코드 재사용성, 유연성, 타입 안정성을 모두 확보할 수 있습니다.