extens
가 아닌 implements
키워드로 구현// interface를 만들고
interface Person {
name: string
age: number
}
// interface에 맞는 생김새의 객체를 만듦
const yezi: Person {
name: 'yezi'
age: 125
}
interface의 설계를 구현
interface Person {
name: string
run(): void // 변수() : 인터페이스 내에서 사용되는 메서드
}
class Yezi implements Person {
constructor(public name: string) {}
run() {
console.log(this.name)
}
}
// Yezi class는 Person 설계물을 구현하고 있다.
// Person의 설계 원칙대로 구현을 해야 오류가 안남
다중 구현 가능
interface Animal {
name: string
run(): string
}
interface Person {
sayName(): string
}
class Yezi implements Animal, Person {
constructor(public name: string) {}
run() {
return this.name
}
sayName() {
return `사람의 이름은 ${this.name}`
}
}
대상이 되는 class를 확장할 때 쓰이지만,
interface를 확장할 때도 사용할 수 도 있음
interface Animal {
name: string
run(): string
}
interface Person extends Animal {
// name: number => 부모 interface와 충돌 시 오류
sayName(): string
}
const yezi:Person = {
name: 'yezi'
run() {
return this.name
}
sayName() {
return `사람의 이름은 ${this.name}`
}
}
implemens와 extends를 동시에 사용할 수 있음
interface Animal {
name: string
run(): string
}
class AnyClass {
}
class Yezi extends AnyClass implements Animal {
constructor(public name: string) {
super()
}
run() {
return this.name
}
}
// 이러한 사용을 권하는 것은 아니고
// typescript에서 제공하는 class의 기능과 interface의 기능을
// 활용하면 복잡한 상황에서의 설계와 확장을 할 수 있어 typescript에서 객체지향 하기 좋음