클래스
동일한 모양의 객체를 더 쉽게 생성할 수 있도록 도와주는 문법
- class 키워드를 이용해 선언
- 타입스크립트에서는 클래스의 필드를 선언할 때 타입을 함께 정의해주어야 한다.
- 엄격한 타입 검사 모드일 때 오류가 발생할 수도 있다.
- 타입스크립트의 클래스는 타입으로도 사용할 수 있다.
- 클래스가 타입으로 사용되면 해당 클래스가 생성하는 객체의 타입과 동일한 타입이 된다.
class Student {
// 필드
name: string = "";
grade: string = "";
age: number = 0;
// 생성자
constructor(name: string, grade: string, age: number) {
this.name = name;
this.grade = grade;
this.age = age;
}
// 메서드
study() {
console.log("열심히 공부 함");
}
introduce() {
console.log("안녕하세요!");
}
}
let studentB = new Student("홍길동", "A+", 27);
studentB.study(); // 열심히 공부 함
studentB.introduce(); // 안녕하세요!
타입스크립트의 상속
- 파생 클래스(확장하는 클래스)에서 생성자를 정의했다면 반드시 super 메서드를 호출해 슈퍼 클래스 (확장되는 클래스)의 생성자를 호출해야 한다.
- 호출 위치는 생성자의 최상단이어야 한다.
접근 제어자
- 클래스의 특정 필드나 메서드를 접근할 수 있는 범위를 설정한다.
- 타입스크립트에서만 제공되는 기능이다.
✅public
모든 범위에서 접근 가능
- 접근 제어자를 지정하지 않으면 기본적으로 public 접근 제어자를 갖게 된다.
- public 접근 제어자를 직접 명시하는 것도 가능하다.
✅protected
클래스 내부 또는 파생 클래스 내부에서만 접근 가능
- public과 private의 중간
- 클래스 외부에서는 접근할 수 없다.
- 클래스 내부와 파생 클래스에서는 접근 가능하다.
✅private
클래스 내부에서만 접근 가능
필드 생략하기
- 접근 제어자는 생성자의 매개변수에도 설정할 수 있다.
- 접근 제어자가 설정되면 자동으로 필드도 함께 선언되기 때문에 필드 부분을 생략해야 한다.
- this.필드 = 매개변수가 자동으로 수행되어 생성자 내부 코드도 생략할 수 있다.
인터페이스와 클래스
- 인터페이스는 클래스의 설계도 역할을 할 수 있다.
- 즉, 인터페이스를 이용해 클래스에 어떤 필드와 메서드가 존재하는지 정의할 수 있다.
제네릭
함수나 인터페이스, 타입 별칭, 클래스 등을 다양한 타입과 함께 동작하도록 만들어주는 기능
1️⃣ 매개변수를 any 타입으로 정의했을 때
functiond func(value: any) {
return value;
}
let num = func(10);
// any 타입
let str = func("string");
// any 타입
functiond func(value: any) {
return value;
}
let num = func(10);
let str = func("string");
num.toUpperCase()
- num이 any 타입으로 추론되었기 때문에 타입스크립트가 오류를 감지하지 않는다.
2️⃣ 매개변수를 unknown 타입으로 정의했을 때
functiond func(value: unknown) {
return value;
}
let num = func(10);
// unknown 타입
let str = func("string");
// unknown 타입
num.toUpperCase(); // ❌
num.toFixed(); // ❌
- 어떤 타입인지 정확히 알 수 없으므로 string 메서드와 number 메서드 모두 사용할 수 없다.
제네릭 함수
모든 타입의 값을 전부 적용할 수 있는 범용적인 함수
- T에 어떤 타입이 할당될 지는 함수가 호출될 때 결정된다.
- 제네릭 함수를 호출할 때 타입 변수에 할당할 타입을 직접 명시하는 것도 가능하다.
- 타입 변수에 할당할 타입을 튜플 타입으로 설정하지 않았다면 number[] 타입으로 추론된다.
- 타입 변수에 할당하고 싶은 특정 타입이 존재한다면 함수 호출과 함께 꺾쇠를 열고 직접 명시해 주는 것이 좋다.
제네릭 인터페이스
- 인터페이스에 타입 변수를 선언하여 제네릭을 인터페이스에도 적용할 수 있다.
- 타입 변수에 할당할 타입을 명시해야 한다.
- 제네릭 인터페이스는 인덱스 시그니처와 함께 사용하면 기존보다 훨씬 더 유연한 객체 타입을 정의할 수 있다.
- 타입 별칭에도 제네릭을 적용할 수 있다.
- 제네릭 인터페이스와 마찬가지로 타입으로 정의될 때 반드시 타입 변수에 설정할 타입을 명시해주어야 한다.
'Web > TS' 카테고리의 다른 글
[TS] TypeScript 조건부 타입 (0) | 2024.09.28 |
---|---|
[TS] TypeScript 기초 문법 (1) | 2024.09.15 |