TypeScript Interface

YEZI🎐·2023년 6월 27일
0

TypeScript

목록 보기
4/8
  • JavaScript에는 존재하지 않음
  • 객체의 타입을 정의하고 생김새를 가지도록 할 수 있음
  • extens가 아닌 implements 키워드로 구현
  • TypeScript에서의 클래스 기능은 C#에서 유래된 것이 많음
  • 일부 기능은 TS에서만 존재하는 고유 문법으로 컴파일 후 사라짐

interface

  • 객체를 정의하고 설계
  • 생김새를 만듦
  • 주로 implements랑 같이 사용됨
  • extends 키워드 사용 가능
// interface를 만들고
interface Person {
  name: string
  age: number
}

// interface에 맞는 생김새의 객체를 만듦
const yezi: Person {
  name: 'yezi'
  age: 125
}

implements

  • 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}`
     }
    }

extends

  • 대상이 되는 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에서 객체지향 하기 좋음
profile
까먹지마도토도토잠보🐘

0개의 댓글