TypeScript란?
JavaScript에 정적 타입 시스템을 추가한 프로그래밍 언어입니다. : 타입명 문법을 통해 명시적으로 타입을 지정할 수 있어 개발 시 오류를 미리 잡아낼 수 있습니다.
기본 자료형
1. 원시 타입 (Primitive Types)
•
boolean: true와 false 값
•
number: 정수와 실수를 포함한 모든 숫자
•
string: 문자열 데이터
•
null: 의도적으로 값이 없음을 표현
•
undefined: 값이 할당되지 않은 상태
•
symbol: 고유하고 변경 불가능한 식별자
•
bigint: 큰 정수값 처리용
2. 객체 타입 (Object Types)
•
object: 원시 타입이 아닌 모든 값
•
array: 동일한 타입의 요소들로 구성된 배열
let numbers: number[] = [1, 2, 3];let strings: Array<string> = ["a", "b", "c"];
TypeScript
복사
•
tuple: 고정된 길이와 각 위치별 타입이 정해진 배열
let userInfo: [string, number] = ["김철수", 25];
TypeScript
복사
3. 특수 타입
•
any: 모든 타입 허용 (타입 검사 우회)
•
unknown: any보다 안전한 최상위 타입
•
void: 반환값이 없는 함수의 반환 타입
•
never: 절대 발생하지 않는 값의 타입
4. 고급 타입 시스템
•
타입 별칭: 기존 타입에 새로운 이름 부여
type Point = { x: number; y: number };
TypeScript
복사
•
인터페이스: 객체의 구조를 정의
interface Person { name: string; age: number;}
TypeScript
복사
5. 조합 타입
•
유니온(Union): 여러 타입 중 하나를 허용
let id: string | number;
TypeScript
복사
•
인터섹션(Intersection): 여러 타입을 모두 만족
type Employee = Person & { employeeId: number };
TypeScript
복사
타입 별칭 vs 인터페이스
구분 | 타입 별칭 (type) | 인터페이스 (interface) |
주요 용도 | 모든 타입에 이름 부여 | 객체 구조 정의 |
확장 방법 | 교차 타입(&) 사용 | extends 키워드 |
선언 병합 | 불가능 (중복 시 오류) | 가능 (자동으로 속성 합쳐짐) |
적용 범위 | 원시/객체/유니온 모든 타입 | 객체 타입에 특화 |
// 타입 별칭 예시
type UserRole = "ADMIN" | "USER" | "GUEST";
type User = {
id: number;
name: string;
role: UserRole;
};
// 인터페이스 예시
interface Person {
name: string;
age: number;
}
interface Employee extends Person {
employeeId: string;
department: string;
}
TypeScript
복사
클래스와 객체
클래스 정의
TypeScript의 클래스는 ES6 클래스 문법을 확장하여 타입 안정성을 제공합니다.
class User {
// 생성자에서 접근 제어자로 속성 자동 선언
constructor(
public name: string,
public age: number,
private role: string
) {}
// 메서드 정의
introduce(): string {
return `안녕하세요, ${this.name}입니다. ${this.age}살이고 ${this.role} 역할입니다.`;
}
// getter/setter
get userRole(): string {
return this.role;
}
}
// 상속 예시
class AdminUser extends User {
constructor(name: string, age: number) {
super(name, age, "ADMIN");
}
manageUsers(): string {
return "사용자 관리 권한이 있습니다.";
}
}
// 인터페이스 구현
interface Printable {
print(): void;
}
class Document implements Printable {
constructor(private content: string) {}
print(): void {
console.log(this.content);
}
}
TypeScript
복사
주요 특징
•
접근 제어자: public, private, protected
•
상속: extends 키워드로 클래스 확장
•
인터페이스 구현: implements 키워드
•
추상 클래스: abstract 키워드로 추상화 지원