-
2월 마지막주차 수업내용 정리스터디/[패스트캠퍼스] 데브캠프: 김민태의 프론트엔드 개발 3기 2025. 2. 28. 13:50
타입스크립트 핵심 개념 정리
1. 컴파일러 언어와 인터프리터 언어
컴파일러 언어
컴파일러 언어는 코드를 실행하기 전에 모든 소스 코드를 기계어로 번역한 후 실행한다. 대표적인 예로 C, C++과 같은 언어가 있다.
인터프리터 언어 (스크립트 언어)
인터프리터 언어는 실행 시점에서 코드의 문장을 하나씩 번역하면서 실행한다. 자바스크립트(JavaScript)와 같은 언어가 대표적이다. 인터프리터 방식이 상대적으로 단순하지만, 실행 속도가 느릴 수 있다.
타입스크립트(TypeScript)는 자바스크립트와 다르게 트랜스파일(Transpile) 과정을 거친 후 실행되므로 컴파일러 언어와 인터프리터 언어의 중간적인 특성을 가진다. 즉, TypeScript는 트랜스파일러 언어라고 할 수 있다.
2. 타입스크립트 실행 과정
타입스크립트는 브라우저에서 직접 실행되지 않는다. 브라우저는 기본적으로 JavaScript와 WebAssembly만 지원하기 때문이다. 따라서 TypeScript 코드를 실행하려면 반드시 JavaScript로 변환해야 한다. 이 변환 과정을 **트랜스파일(Transpile)**이라고 부르며, 이를 수행하는 도구가 **트랜스파일러(Transpiler)**이다.
실행 단계
- 트랜스파일: TypeScript를 JavaScript로 변환 (컴파일과 유사하지만 기계어로 번역되지 않기 때문에 트랜스파일이라는 용어를 사용)
- JavaScript 실행: 변환된 JavaScript 코드가 브라우저 또는 Node.js 환경에서 실행
3. 타입 안정성(Type Safety)
타입 안정성이란 변수에 정해진 유형의 데이터만 들어갈 수 있도록 보장하는 개념이다. 타입스크립트는 이러한 타입 안정성을 제공하며, 이를 위해 트랜스파일 과정에서 JavaScript 코드에 타입 검사를 위한 코드를 추가한다. 자바스크립트는 타입 안정성이 없어서 변수에 어떤 값이든 들어갈 수 있어 예기치 않은 버그가 발생할 가능성이 크지만, 타입스크립트는 이를 방지할 수 있다.
4. 타입스크립트의 주요 타입
4.1 기본 타입
- void: 모든 자바스크립트 함수는 리턴값이 없을 때 undefined를 반환하지만, 논리적으로는 아무것도 반환하지 않는다는 의미를 명확히 하기 위해 void를 사용한다.
- any: 어떤 값이든 들어갈 수 있으며, 타입스크립트의 타입 검사를 우회하는 방식이다. 즉, any를 사용하면 JavaScript와 동일한 상태가 된다. 따라서 가능하면 사용을 피하는 것이 좋다.
4.2 객체 타입
객체 타입을 선언하는 방법은 여러 가지가 있다.
let obj: {} = {};
하지만 위처럼 선언하면 객체 내부의 프로퍼티에 대한 정보가 없기 때문에 실용성이 떨어진다.
4.3 배열 타입
let numbers: number[] = []; let strings: string[] = [];
배열 안의 요소 개수와 타입이 정해져 있다면 **튜플(tuple)**을 사용할 수 있다.
let tuple: [number, string] = [10, 'kim'];
튜플을 사용하면 특정 위치에 특정 타입의 값이 들어가도록 강제할 수 있다.
5. 타입 정의 방법: Type Alias vs Interface
Type Alias
type UserType = { name: string; age: number; };
Interface
interface UserInterface { name: string; age: number; }
Type Alias와 Interface의 차이점
구분특징
Interface 객체 간의 소통을 위한 계약. 확장 가능. 일반적으로 더 많이 사용됨. Type Alias 특정 데이터의 형식을 정의. API 응답 데이터 등의 구조를 지정할 때 적합. 강사님은 제공자와 사용자의 소통이라는 맥락이 중요하다면 Interface를, 데이터의 정의라면 Type Alias를 사용하는 것이 좋다고 설명한다.
덕 타이핑(Duck Typing)
타입스크립트에서는 타입의 형태가 동일하면 같은 타입으로 취급한다. 즉, 정의된 타입이 같다면 같은 타입으로 간주하는 특성을 가진다. 이를 덕 타이핑이라고 한다. "오리처럼 보이면 오리다!"라는 개념을 기반으로 한다.
6. 함수 타입 선언 방식
// 일반 함수 function add(a: number, b: number): number { return a + b; } // 화살표 함수 const multiply = (a: number, b: number): number => a * b;
일반 함수는 prototype을 가지지만, 화살표 함수는 가지지 않는다. 따라서 prototype 관련 사용이 필요하고, this 바인딩이 필요 없을 때 화살표 함수를 사용하는 것이 좋다.
9. 제네릭(Generic)과 keyof 연산자
제네릭을 사용하면 타입을 유연하게 정의할 수 있다. 제네릭에서 T는 Template의 약자이며, 다른 대문자로도 사용 가능하다.
function identity<T>(arg: T): T { return arg; }
제네릭이라는 용어는 다른 언어에서는 Template이라는 개념으로 불리기도 한다. 즉, '틀'을 만들어 두고 필요한 데이터를 넣어 활용하는 개념이다.
keyof 연산자는 객체의 키 값을 추출하는 데 유용하다.
type UserKeys = keyof User; // 'name' | 'age'
10. 마무리
타입스크립트는 코드의 안정성을 높이고, 설계를 명확하게 하도록 도와주는 강력한 도구이다. 강사님은 타입스크립트를 사용하는 개발자가 더 좋은 설계를 할 가능성이 높다고 강조한다. 처음에는 문법이 어렵게 느껴질 수 있지만, 익숙해지면 생산성이 크게 향상된다.
이제 남은 것은 직접 코드를 작성하면서 익히는 것이다. TS 치트 시트를 뽑아서 옆에 두고 익히는 것도 좋은 방법이다.
'스터디 > [패스트캠퍼스] 데브캠프: 김민태의 프론트엔드 개발 3기' 카테고리의 다른 글
전역 상태와 로컬 상태 분리 전략 (0) 2025.03.14 정규표현식(Regular Expressions) 정리 (0) 2025.03.07 리덕스(Redux) 1.0 (0) 2025.02.21 useEffect와 리액트 라우팅 개념 정리 (0) 2025.02.14 자바스크립트 런타임과 이벤트 루프, 비동기 처리에 대한 이해 (5) 2025.01.24