💡 인터페이스(interface)란?
💡 인터페이스의 구조
- 변수명은 클래스와 구분하기 위해 대문자로 시작할 것
- 프로퍼티별 구분은
;
interface Person {
readonly name: string;
age: number;
greet(greeting: string): void;
}
let user1: Person;
user1 = {
name: 'Lily',
age: 20,
greet(greeting: string) {
console.log(`${gretting} ${this.name}`);
},
};
💡 인터페이스 특징
readonly
제어자 사용 가능(public, private은 불가)
- 인터페이스에 readonly를 설정하면 class에도 자동으로 설정된다.
💡 사용자 정의타입과 인터페이스
- 기능과 그 모양은 비슷하나, 가장 큰 차이는 인터페이스는 객체의 타입을 정의하기 위해서만 사용
interface Person {
name: string;
age: number;
greet(greeting: string): void;
}
type Person = {
name: string;
age: number;
greet(greeting: string): void;
}
💡 인터페이스를 사용하는 이유
- 클래스 간에 기능을 쉽게 공유할 수 있기 때문에 사용한다.
- 즉, 특정 기능이 공유되어야 할 때 사용하면 유용하다. 왜냐하면 해당 인터페이스를 사용한다면 반드시 그 안에 정의되어있는 메서드를 사용해야 하기 때문에.
💡 인터페이스의 확장
- 두 개의 인터페이스를 결합하여 새로운 인터페이스를 만들어 클래스에 적용할 수 있다.
interface Named {
readonly name: string;
}
interface Greeting extends Named {
greet(phrase: string): void;
}
class Person implements Greeting {
name: string;
age = 30;
constructor(n: string) {
this.name = n;
}
greet(phrase: string) {
console.log(phrase + '' + this.name);
}
}