18.(Ts) 인터페이스

상호 작용

물체의 모양을 알고 싶을 때 사용합니다.

인터페이스는 객체 지향 프로그래밍의 개념을 구현하는 반면 유형은 더 유연합니다.

유형~에서 정의할 때

type Player = {
    nickname:string,
    healthBar:number
}

상호 작용~처럼 정의하다 그때에

interface Player {
    nickname:string,
    healthBar:number
}

Function makeUser(user: Player) : Player{
   return {
        nickname : ’subin’,
        healthBar : 10
    }
}

interface Hello = string; // interface는 오직 object의 모양만 설정할 수 있기때문에 에러가 난다.

유형이 더 유연하기 때문에 다양한 목적으로 사용할 수 있습니다.

인터페이스와 마찬가지로 개체의 모양을 정의하고 별칭을 만들 수 있습니다.

하지만 상호 작용~이다 오직 물체오직 허용.

*추상 클래스 인계하다 그때에

abstract class User {
    constructor(
        protected firstName:string,
        protected lastName:string,
    ){}
    abstract sayHi(name:stirng):string
    abstract fullName():string
}

class Player extends User{
    fullName(){
        return `${this.firstName} ${lastName}`
    }
    sayHi(name:string){
        return `Hello ${name}. My name is ${fullName}`
    }
}

*추상 클래스 대신에 상호 작용붓다 인계하다 그때에

interface User {
    firstName : string,
    lastName : string,
    sayHi(name:stirng) : string
    fullName() : string
}
interface Human {
    health : number
}
// 하나 이상의 interpace를 동시에 상속받을 수 있다.
class Player implements User, Human{ //  abstract class를 상속받을때 쓰는 extends 대신 inplements라는 js가 사용하지 않는 단어를 쓴다.
    constructor(
        public firstName : string, // Interface를 상속할때는 property를 private로는 만들지 못한다.
        public lastName : string,
        public health : number,
    ){}
    fullName(){
        return `${this.firstName} ${lastName}`
    }
    sayHi(name:string){
        return `Hello ${name}. My name is ${fullName}`
    }
}

추상 클래스는 표준화된 속성 및 메서드를 가질 수 있는 청사진을 만드는 데 사용됩니다.

추상 클래스를 사용하지만 js에서는 일반 클래스로 변경합니다.

인터페이스가 컴파일되면 js로 바뀌지 않고 사라집니다.

그래서 이때 인터페이스붓다 사용.

* 인터페이스 상속 시 주의사항
1. 개인 또는 재산을 사용할 수 없습니다.
2. 추상 클래스에는 생성자가 있었는데 인터페이스를 사용할 때 생성자 부분이

상속 클래스에서 개별적으로 설정해야 합니다.