[Typescript] 타입스크립트로 블록체인 만들기 강의 학습 #5

jhcha·2023년 7월 30일
0

Typescript

목록 보기
5/8
post-thumbnail

abstract, interface

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

javascript는 abstract가 없어서 단지 일반 class로 변환된다.

implements

타입스크립트에서 클래스가 인터페이스를 상속하기 위해서 implements를 사용할 수 있다.

interface User {
    firstName: string,
    lastName: string
    sayHi(name: string): string
    fullName(): string
}
interface Human {
	health: number
}
// 동시에 여러개의 interface를 상속할 수 있다.
class Player implements User, Human{
  constructor(
    public firstName: string,
    public lastName: string,
    public health: number
  ) {}
	fullName(){
    	return `${this.firstName} ${this.lastName}`
  }
    sayHi(name: string): string{
    	return `Hello ${name}. My name is ${this.fullName()}`
  }
}

인터페이스에서 인터페이스를 상속할 땐 extends, 클래스에서 인터페이스를 상속할 땐 implements를 사용한다.

  • interface가 abstract class를 대체하면 인터페이스를 상속받는 클래스에서 생성자를 설정해야 한다.
  • 인터페이스의 프로퍼티는 상속받는 클래스에서 반드시 public 접근 제어자만 사용할 수 있다.
  • abstract class는 자바스크립트로 코드가 변환될 때 일반 class로 변환되지만, interface는 자바스크립트에서 사용할 수 없기 때문에 코드 변환 시 보이지 않는다. 따라서, 추상 클래스를 보여주지 않고 파일 사이즈를 줄일 수 있다.
fuction makeUser(user: User){
	return "hi"
}
makeUser({
	firstName: "jh",
    lastName: "cha"
})

다음과 같이 인터페이스를 타입과 같이 사용할 수 있음

type interface 차이

타입스크립트 커뮤니티에서는 클래스나 오브젝트의 모양을 정의하고 싶으면 인터페이스를 사용하고, 다른 모든 경우에서는 타입을 쓰라고 권장하고 있다.
인터페이스은 직관적인 것이 장점이고, 타입은 다른 여러 기능 (alias, 값의 제한 등)이 가능하다.

0개의 댓글