개키우는개발자 : )

TypeScript 클래스-2 본문

TypeScript/TypeScript

TypeScript 클래스-2

DOGvelopers 2020. 1. 5. 14:37
반응형

광고 클릭은 개발자(저) 에게 큰 힘이 됩니다!!'ㅁ'

| 타입 스크립트 클래스

 

interface의 상속 및 abstract(추상화) class

 

Person 은 이름이 있고 말을 할 수 있습니다.

Programmer는 코드를 작성할 수 있습니다.

 

클래스에는 상속을 받을 수 있는데 class에서 class를 상속받을 땐 extends를 사용하고 interface를 상속받을 땐

implements 키워드를 사용하여 상속받습니다. interface의 키워드는 다중 상속이 가능합니다.

하지만 클랜은 하나의 클래스만 상속이 가능합니다.

 

KoreanProgrammer는 Person, Programmer 인터페이스를 상속받아 interface에 선언된 property와 method를 모두 구현하고 추가로 구현된 kimchi method가 구현되어 있습니다. 

interface Person {
    name : string;
    say(message: string) : void;
}

interface Programmer{
    writeCode(requirment: string) : string;
}

class KoreanProgrammer implements Person,Programmer {
 
    constructor(public name: string){}
    
    say(message: string): void {
        console.log(message);
    }

    writeCode(requirment: string): string {
        console.log(requirment);
        return requirment + '.....';
    }

    kimchi(){
        console.log('i love kimchi');
    }
}

abstract class도 인터페이스와 마찬가지로 추상화가 가능합니다. 하지만 abstarct class 내부는 구현부, 선언부 모두 사용 가능한 class입니다.

 

interface에 선언된 모든 값을 구현해야 하듯이 abstract도 마찬가지로 모두 구현해야 합니다.

하지만 abstract class는 idNumber property와 kimchi method를 선언하고,

상속받은 Person interface의 method까지 구현하여 추상화가 가능합니다.

이렇게 작성한 abstract는 KoreanProgrammer class에 상속을 하는데

상속받은 KoreanProgrammer class는 반드시 abstract class의 선언부를 모두 구현, 적용해야 하고

상속을 받은 자식 class는 반드시 부모의 class 생성자 super를 작성해야 합니다.

interface Person {
    name : string;
    say(message: string) : void;
}

interface Programmer{
    writeCode(requirment: string) : string;
}

abstract class Korean implements Person{

    public abstract idNumber : number;

    // 부모 생성자의 name
    constructor(public name : string){}

    say(message: string): void {
        console.log(message);
    }

    abstract kimchi() : void;   
}

class KoreanProgrammer extends Korean implements Programmer {
 
    constructor(public name: string, public idNumber: number){
        // super == 부모 클래스의 생성자
        super(name);
    }
    say(message: string): void {
        console.log(message);
    }
    writeCode(requirment: string): string {
        console.log(requirment);
        return requirment + '.....';
    }
    kimchi(){
        console.log('i love kimchi');
    }
}

 

koreanProgrammer class는 인스턴스 화가 가능하지만 abstarct class는 사용할 수 없습니다.

const dog = new KoreanProgrammer("dog",1234);
const person = new Korean("dog");

 

반응형

'TypeScript > TypeScript' 카테고리의 다른 글

TypeScript intersection & union Types  (0) 2020.01.05
TypeScript 제네릭  (2) 2020.01.05
TypeScript 클래스-1  (0) 2020.01.04
TypeScript enum 타입  (0) 2020.01.04
TypeScript 함수형 타입  (0) 2020.01.04
Comments