rhanziy

TS - 추상클래스 및 인터페이스 본문

Html_css_js

TS - 추상클래스 및 인터페이스

rhanziy 2022. 10. 29. 17:56
abstract class User {
    constructor(
        protected firstName: string,
        protected lastName:string
    ){}
    abstract sayHi(name:string):string
    abstract fullName():string
}
class Player2 extends User {
    sayHi(name:string){
        return `Hello ${name}. My name is ${this.fullName()}`
    }
    fullName(){
        return `#{this.firstName} ${this.lastName}`
    }
}

 

타입스크립트에서 추상클래스를 구현하면 자바스크립트에서 컴파일했을 때 일반적인 클래스로 바뀌어버림.

 

class User {
   constructor(firstName, lastName){
      this.firstName = firstName;
      this.lastName = lastName;
  }
}

표준화된 프로퍼티와 메소드를 갖게하기 위해 추상클래스를 사용한 의미가 없어진다.

 

 

👉 인터페이스를 사용해야한다! 

interface User {
    firstName:string,
    lastName:string,
    sayHi(name:string):string
    fullName():string
}

interface Human{
    health:number
}

class Player2 implements User, Human{  //다중 인터페이스도 가능
    constructor(
        public firstName:string,
        public lastName:string,
        public health:number
    ){}
    sayHi(name:string){
        return `Hello ${name}. My name is ${this.fullName()}`
    }
    fullName(){
        return `${this.firstName} ${this.lastName}`
    }
}

 

인터페이스 특징

생성자가 없음.

오브젝트나 클래스의 모양을 특정지을 수 있다.

implements로 여러 인터페이스를 상속, 확장할 수 있다.

같은 이름을 사용해 다형성의 특징 구현 가능.

자바스크립트로 컴파일 됐을 때 보여지지 않음~

but 접근제한자 only public ㅠㅠ (private, protected ❌)

Comments