ts Interface

박상훈·2023년 3월 17일
0

🤭인터페이스란 ?

인터페이스 : 객체의 구조를 설명합니다.

  • 클래스와 달리 interface 는 청사진으로 사용되지않으며
  • 사용자 정의 타입으로 사용할 뿐 입니다.

Greetable 객체가 가질 메소드를 정의 하는 것
Greetable 인터페이스로 객체의 타입을 확인 하는데 사용 할 수 있으며

interface Greetable {
  name: string;
  age: number;
  greet(phrase: string): void;
  // 이름 ,괄호 쌍, 반화타입, 입력후 void를 입력합니다
  // 그후 괄호안에  원하는 입수를 입력합니다.
  // 정리하자면 인수의 이름과 타입, 이어서 메소드의 반환 타입 순서입니다
}

클래스 구문에 Interface 추가하기

class Person implements Greetable, AntherInterface {
    name: string;  
    age = 30
    constructor(n: string) {
        this.name = n;
    }

    greet() {
        console.log(pharse + ' ' + this.name)
    }
}

class 뒤에 implements Greetable
여러개의 인터페이스를 구현 할 수 있다는게 상속과의 차이점 입니다.
상속은 한 클래스로부터만 상속할 수 있지만
인터페이스는 쉼표로 구분하여 여러 개를 구현할 수 있으므로
또 인터페이스를 만들 수 있습니다.

let user1: Greetable;

user1 = new Person('Max') 

user1.greet('Hi there - I am')

user1에 Grettalbe을 보냈기 때문에
user1에는 greet메소드가 없는것은 무엇도 저장할 수 없는것입니다.
무엇을 기반으로 하든 Greetable이 greet 메소드를 작성하게끔 하기 때문입니다.

인터페이스와 사용자 정의 타입은 완전히 같지 않습니다.
종종 서로 바꿔서 사용자 지정 타입 대신 인터페이스를 사용하거나 반대로도 가능합니다
가장 큰 차이점 하나는 인터 페이스는 객체의 구조를 설명하기 위해서만 사용한다는 것입니다.
이 경우에도 타입을 사용할 수 있지만 , 사용자 정의 타입 대신 유니온 타입등을 저장 할 수도있습니다.
인터페이스를 자주사용하는 이유는 클래스가 인터페이스를 이행하고 준수해야 하는 약속처럼 사용 할 수 있기 때문입니다.

따라서 인터페이스는 주로 구체적인 구현이 아닌 서로 다른 클래스 간의 기능을 공유 하기위해 사용 됩니다.

인터페이스 내에 구현이나 값을 입력하는 게 아닌 구조와 클래스가 가져야 할 기능을 입력해야 합니다.
이는 추상 클래스로 작업 하는 것과 다소 비슷하지만.
인터페이스에서는 구현 세부 사항이 전혀 없는 반면,
추상 클래스는 여러분이 덮어써야 햇던 부분과 제가 수행한 구체적 구현 부분을 혼합할 수 있습니다.

이것이 인터페이스와 추상 클래스 간의 중요한 차이점입니다.

상속과 인터페이스도 구현 하는법

interface Named {
  readonly name: string;

  // readonly 제어도 추가 가능
  // public private는 추가 불가능
  // 즉 class 에도 영향을 미치게 됩니다.
}

interface Greetable extends Named {
  // , 이용해 확장 가능하며 class는 불가능 합니다.
  age: number;
  greet(phrase: string): void;
} b

인터페이스를 이용해 함수를 작성하기

인터페이스는 객체의 구조를 정의하지만
함수의 구조를 정의 하는 데에도 사용됩니다.
인터페이스를 사용하여 함수를 생성할 수 있습니다.

interface AddFn {
    (a:number , b:number): number;
}
type AddFn = (a:number,b: number) => number;

let add: AddFn;

add = (n1: number, n2:number) => {
    return n1 + n2
}

참고링크 Classes
참고링크 Interface

profile
다들 좋은 하루 되세요

0개의 댓글