의도: 지원자가 JavaScript의 한계점과 TypeScript의 등장 배경을 이해하고 있는지 평가
팁
나의 답안
자바스크립트는 동적 타입 언어라서, 변수나 함수의 타입이 런타임 시점에 결정됩니다.
그러다 보니, 개발 도중에는 오류를 잡지 못하고 실제 실행 중에야 에러가 발생하는 경우가 많았습니다.
이런 특성 때문에 규모가 커질수록 유지보수성과 안정성이 떨어지고, 팀 단위 협업에서 인터페이스나 데이터 구조를 명확히 보장하기 어렵다는 문제가 있었습니다.이런 문제를 해결하기 위해 등장한 것이 바로 타입스크립트입니다.
타입스크립트는 자바스크립트에 정적 타입 시스템을 추가해서 컴파일 단계에서 오류를 미리 잡아내고, 코드 구조를 명확히 정의할 수 있도록 만들어졌습니다.
즉, 타입스크립트는 자바스크립트의 유연함을 유지하면서도 대규모 프로젝트에서 요구되는 정확성, 안정성, 개발 생산성을 확보하기 위해 등장했다고 볼 수 있습니다.
주어진 답안 (모범 답안)
자바스크립트는 동적 타입 언어로, 타입 검사가 런타임에 이루어져서 개발 중에 타입 관련 오류를 잡기 어렵습니다.
타입스크립트는 정적 타입을 제공하여 컴파일 타임에 타입 오류를 잡을 수 있게 합니다.
타입스크립트는 코드의 가독성과 유지보수성을 높이고, 대규모 애플리케이션 개발에 유리합니다.
TypeScript는 2012년 마이크로소프트(Microsoft)에 의해 개발된 프로그래밍 언어로, JavaScript의 상위 집합(superset)이다.
JavaScript의 한계를 보완하기 위해 만들어졌으며, 특히 대규모 애플리케이션 개발에서의 생산성 향상과 유지보수를 높이는 것이 주요 목표였다.
JavaScript의 초기 목적
JavaScript는 1995년 넷스케이프(Netscape)에서 브렌던 아이크(Brendan Eich)에 의해 개발된 언어로, 웹페이지의 인터렉티브(Interactive) 기능을 추가하는 역할을 하기 위해 만들어졌다.
HTML과 CSS가 정적인 요소를 담당했다면, JavaScript는 웹 페이지에서 버튼 클릭, 폼 입력 처리, 애니메이션 효과 등의 동적 기능을 담당하는 언어였다.
이때 JavaScript의 중요한 특징은 다음과 같다.
JavaScript의 역할 확장
JavaScript는 원래 단순한 클라이언트 사이드 스크립팅 언어였지만, 시간이 지나면서 웹 애플리케이션이 복잡해짐에 따라 역할이 확장되었다.
- AJAX(Asynchronous JavaScript and XML)의 등장
- 2005년 구글이 Google Maps와 Gmail에서 AJAX를 사용하면서, JavaScript로 브라우저에서 백엔드와 비동기 통신을 수행할 수 있게 되었다.
- 이에 따라 웹 애플리케이션이 점점 더 동적이고 복잡해졌다.
- Node.js의 등장
- 2009년에 JavaScript가 서버에서도 실행될 수 있도록 Node.js가 등장하면서, 백엔드 개발에서도 JavaScript가 사용되었다.
- 이를 통해 JavaScript는 풀스택 개발이 가능한 언어로 확장되었다.
- SPA(Single Page Application) 트렌드
- Angular, React, Vue.js 등의 프레임워크가 등장하면서, JavaScript는 점점 대형 프로젝트에서 사용되었다.
하지만 이러한 발전에도 불구하고, JavaScript는 대규모 프로젝트에서 유지보수가 어렵다는 문제를 안고 있었다.
JavaScript는 원래 소규모 웹사이트의 인터랙티브 기능을 추가하는 용도로 만들어졌기 때문에, 대형 애플리케이션 개발에는 적합하지 않은 단점들이 있었다.
let message = "hello";
message = 42; // 오류 없음 (런타임 에러 가능)위와 같이 message 변수는 처음에는 문자열이었지만, 나중에 숫자로 변경되었다.컴파일 과정이 없음
JavaScript는 인터프리터 언어이므로 실행 전에 타입 검사를 수행하지 않는다.
따라서, 다음과 같은 오류를 작성하더라도 코드가 실행되기 전까지는 알 수 없다.
function add(a, b) {
return a + b;
}
console.log(add(10, "20")); // "1020" (의도하지 않은 결과)
이러한 문제는 작은 규모의 프로젝트에서는 크게 문제되지 않지만, 대형 애플리케이션에서는 디버깅이 어렵고, 코드의 안정성을 보장하기 어려운 문제를 야기했다.
이러한 JavaScript의 문제점을 해결하기 위해 마이크로소프트는 2012년 TypeScript를 발표했다.
TypeScript의 주요 목표
TypeScript의 주요 기능
정적 타입 시스템
TypeScript는 변수에 타입을 지정할 수 있으며, 타입이 일치하지 않으면 컴파일 오류를 발생시킨다.
function add(a: number, b: number): number {
return a + b;
}
console.log(add(10, "20")); // 오류 발생
인터페이스 및 제네릭
TypeScript는 대형 애플리케이션에서 유지보수성을 높이기 위해 인터페이스(interface)와 제네릭(generic)을 지원한다.
interface User {
name: string;
age: number;
}
function greet(user: User): string {
return `Hello, ${user.name}`;
}
const person = { name: "Alice", age: 25 };
console.log(greet(person)); // 정상 동작
인터페이스를 활용하면 객체의 구조를 명확히 정의할 수 있어 유지보수성이 향상된다.
TypeScript는 발표 이후 꾸준히 성장하여, 현재 대규모 애플리케이션에서 널리 사용되고 있다.
TypeScript는 JavaScript의 단점을 보완하면서도 기존 코드와 호환되는 강력한 정적 타입 언어이다.
특히 대규모 애플리케이션을 개발할 때 유지보수성과 안정성을 높여주기 때문에, 현재 많은 기업과 개발자들이 TypeScript를 선호하고 있다.
TypeScript는 JavaScript의 발전 과정에서 필연적으로 등장한 언어이며, 앞으로도 지속적으로 발전할 것으로 예상된다.