ProgrammingLang/typescript

[typescript] 12. interface 와 추상 class 차이

jinkwon.kim 2019. 5. 6. 17:15
728x90
반응형

[typescript] 12. interface (인터페이스)와 추상 Class 차이

 

1. interface(인터페이스)

  1) 개념

      interface는 A와 B 간의 통신규약(약속)입니다. 그래서 interface에는 선언만 존재합니다. 

    좀 더 풀어서 설명을 하면, 프로그래머 A와 B가 총을 개발한다면 아래 와 같이 기능 개발을 따로 할 수 있습니다.

      - A : 총의 기능을 만듭니다.

      - B : 총을 실제로 사용하는 부분을 만든다.

    그런데 개발 시간이 촉박하여 A와 B는 동시에 개발을 해야 한다고 할 때, A, B는 서로 공통적으로 사용할 부분을

    미리 선언을 합니다. 여기서 미리 선언하는 정보를 모아 둔 것을 interface라고 합니다.  A, B는 interface를 사용하여

    서로 개발을 진행 후 B는 interface를 사용하여 Dummy로 개발 한 부분을 A의 코드로 변경하여 개발을 완료합니다.

    이렇듯 interface는 협업 개발에 있어서 서로 간의 통신규약(약속)을 의미합니다.

 

   

  2) 특징   

    - javascript(ES6)가 지원하지 않는 typescript만의 특징입니다.

    - interface는 type이며 compile후에 사라집니다.

    - interface는 선언만 존재합니다.

    - 속성과 method는 선언할 수 있지만 접근 제한자는 설정할 수 없습니다.

    - intreface 간에 extends를 사용하여 다중 상속이 가능합니다.

      Ex) interface extends Bird, Dog, horse { }

 

  2) 사용 이유

    협업하여 개발 시 공통적으로 사용되는 부분에 대한여 미리 정의하여 개발할 경우 추후 코드를 합칠 때 효율 적이기

    때문에 사용합니다.

 

  3) 형태

    - interface에 사용할 속성 및 method를 선언합니다. 

    - class에서 implements를 사용하여 interface를 구현합니다.

interface MyGun {
    bullet: number;          // 속성
    shotGun(): void;         // method
    getBulletInfo(): number; // method
}

class RazerGun implements MyGun {
    bullet: number;

    constructor() {
        this.bullet = 4;
    }

    shotGun() {
        console.log("비잉~~");
        this.bullet--;
    }

    getBulletInfo(): number {
        return this.bullet;
    }
}

  4) 사용법 

// 동기 개발을 위하여 사용할 interface
interface MyGun {
    bullet: number;          // 속성
    shotGun(): void;         // method
    getBulletInfo(): number; // method
}

// A 개발자가 동시 개발 당시 사용 할 interface를 구현한 실제사용할 class
class RazerGun implements MyGun {
    bullet: number;

    constructor() {
        this.bullet = 4;
    }

    shotGun() {
        console.log("비잉~~");
        this.bullet--;
    }

    getBulletInfo(): number {
        return this.bullet;
    }
}

// B 개발자가 동시 개발 당시 사용 할 interface를 구현한 Dummy Class
class DumyGun implements MyGun {
    bullet: number;

    constructor() {
        this.bullet = 2;
    }

    shotGun() {
        console.log("가 짜~~~");
    }

    getBulletInfo(): number {
        return 1;
    }
}

// B 개발자의 개별 개발 당시 Dummy 코드
let gunUser = new DumyGun();
gunUser.shotGun();

// B 개발자가 A 개발자의 개발 완료후 Dummy Code를 실제 코드 변경한 코드
let realGunUser = new RazerGun();
realGunUser.shotGun();

 

2. 추상 Class와 interface의 용도 차이

  1) 먼저 읽어야 할 것 추상 Class 설명 (마지막 챕터)

    - https://doitnow-man.tistory.com/198

 

[typescript] 11. 오버라이딩과 오버로딩 그리고 추상 class

[typescript] 11. 오버 라이딩(Overriding)과 오버 로딩(Overloading) 1. 오버 라이딩(Overrding) 1) 개념 부모 class에 정의된 method를 자식 class에서 재 정의하는 개념입니다. 2) 사용 이유 상속받은 부모 met..

doitnow-man.tistory.com

  2) 추상 Class와 interface 용도 차이 설명

    추상 Class와 Interface는 사용하는 용도가 다릅니다.

    - 추상 Class는 프로그램의 전체 구조를 짤 때 필요합니다.  

    - interface는 프로그래머 간의 협업 개발을 할 때 필요합니다.

728x90
반응형