타입스크립트 TS 공부 #4 class

사공 오·2022년 4월 28일
0

TS 기초 공부

목록 보기
4/7
post-thumbnail

class

class CartJS {
    constructor(user){
        this.user = user;
        this.store{};
    }
    put(id, product){
        this.store[id] = product;
    }
    get(id){
        return history.store[id];
    }
}

js에서 class 사용할 경우

상속클래스 (extends 사용)

interface User {
    name: string;
}
interface Product {
    id: string;
    price: string;
} //인터페이스

class Cart {

    public user: User; //인터페이스 클래스에 들고오기

    protected user1: User; // 이것도 인스턴스에서 접근할 수 없음 but 차이점은 다른 클래스에 상속할 경우
    private store: object; // 이렇게 프라이빗으로 정의하면 인스턴스와 상속된 클래스에서 모두 접근할 수 없음

    constructor( protected user1: User, private store: object = {}){ // 이렇게 접근제한자랑 매개변수의 타입을 같이 정의할 수 있고, 기본 값을 줄수도 있음
        // this.user = user; - 위처럼 정의하면 이거 작성안해도됨 (이 class에 그냥 할당됨)
        // this.store = {};
    }
    public put(id: string, product: Product){
        this.store[id] = product;
    }
    get(id: string){
        return this.store[id];
    }
}

class PromotionCart extends Cart { //클래스 상속받기
    addPromotion(){
        this.user //protected의 경우 상속클래스에서 사용가능 
        this.store // private는 상속에서도 못씀
    }
}

class PromotionCart extends Cart { //클래스 상속받기

public - 모두 접근 가능
protected - 인스턴스 접근 X / 상속클래스 접근 O
private - 인스턴스와 상속된 클래스에서 모두 접근 X


클래스에서 인터페이스를 구현(implements 사용)

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

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

//클래스에서 인터페이스를 구현하는 방법
class KoreanProgrammer implements Person, Programmer{ //다중 인터페이스를 구현한 새로운 타입 korean
    constructor(public name: string){
    }
    say(): void {
        console.log('hi');
    }
    writeCode(requirment: string): string {
        console.log(requirment);
        return requirment + '.....';
    }

    loveKimchi(){
        console.log('love~kimchi~');
    }
}
//코리안은 펄슨이라는걸 보장..
//class 이름에 호버해서 문제해결> person 인터페이스 구현 누르면 say까지 자동으로 만들어줌

const ony = new KoreanProgrammer('ony');



abstract class 추상 클래스

완성이 되지않은 클래스, 바로 instance 만들 수 없지만, 다른 상속을 받은 클래스를 통해서 instance만들 수 있음

abstract class Korean implements Person { //추상으로 정의하면 - 상속해야 instance 사용함

    public abstract jumin: number;

    constructor(public name: string){

    }
    say(msg: string){
        console.log(msg);
    }

    abstract loveKimchi(): void; // 안에서 이렇게 추상 정의하기
}


class KoreanProgrammer2 extends Korean implements Programmer{ //인터페이스 Programmer 구현 + 추상 클래스인 Korean 상속받기
  // Korean 에서 정의한 추상00들을 하위클래스인 KoreanProgrammer2여기서 정의내려야함

    constructor(public name: string, public jumin: number){
        super(name); //부모클래스 Korean (super)의 생성자(name) 를 호출 해줘야함 ! 
    }

    say(): void {
        console.log('hi');
    }
    writeCode(requirment: string): string { //implements한 Programmer에 내장된 매서드도 구현해야함 
        console.log(requirment);
        return requirment + '.....';
    }

    loveKimchi(): void{
        console.log('love~kimchi~');
    }
}


const ony2 = new KoreanProgrammer2('ony',2222); // 추상클래스의 하위타입은 만들 수 있음
const ony3 = new Korean('ony'); //오류남 추상 클래스는 instance 만들 수 없음

0개의 댓글