Archive

Typescript Day 04 - 클래스

|

Typescript Day 04 - 클래스


클래스

타입스크립트는 C++, Java와 같은 객체지향 언어에서 흔히 볼 수 있는 클래스 관련 키워드를 제공한다

클래스 선언문의 기본 형태

class 클래스명 {
    [private | protected | public] 속성명[?]: 속성타입[...]
}

접근제한자를 생략하면 일반적으로 public으로 간주한다

접근제한자

  • private : 클래스 내부에서만 접근 가능
  • protected : 상속했을 때 접근 가능

둘다 인스턴스로 외부에서 호출 시 에러 발생


생성자

생성자에 접근제한자를 붙이면 함축된 표현이 가능하다

class test1 {
    name: string;
    age?: number;
    constructor(name: string, age?: number) {
        this.name = name;
        this.age = age;
    }
}

// 함축된 표현
class test2 {
    constructor(public name: string, public age?: number) {}
}


인터페이스 구현

implements 키워드로 인터페이스를 구현할 수 있다.

클래스 바디에는 반드시 인터페이스의 속성을 멤버로 가져야 한다.

interface IPerson {
    name: string;
    age?: number;
}

class test3 implements IPerson {
    constructor(public name: string, public age?: number) {}
}


추상 클래스

abstract 키워드를 통해 추상 클래스를 만들 수 있다.

메서드나 속성 앞에 abstract를 붙이면 이를 상속하는 다른 클래스에서 반드시 구현해야한다.

추상 클래스는 인스턴스화 할 수 없다.

abstract class AbstractPerson {
    abstract name: string;
    abstract move(): void;
    constructor(public age?: number){}
}

class Human extends AbstractPerson {
    constructor(public name: string, public age?: number) {
        super(age);
    }
    
    move(): void {
        console.log('walking');
    }
}

let jack: AbstractPerson = new AbstractPerson(); // 오류
let jack: Human = new Human('jack', 32);
jack.move();


상속

상속을 통하여 이미 존재하는 클래스를 확장해 새 클래스를 만들 수 있다.

class Animal {
    move(): void {
        console.log('walking');
    }
}

class Dog extends Animal {
    bark(): void {
        console.log('wal wal');
    }
}

const dog: Dog = new Dog();
dog.move(); // walking
dog.bark(); // wal wal


Read-only

readonly 키워드를 통해 읽기전용 속성을 선언할 수 있다. readonly 속성은 선언 시 또는 생성자 내부에서만 값을 할당할 수 있다. 그 외의 경우에는 값 할당 시 오류 발생.

이를 이용하여 상수의 선언에 사용한다.

class Foo {
    readonly name: string = 'jack';
    readonly age: number;
    constructor(readonly age: number = 30) {}
}


static

클래스의 인스턴스를 생성하지 않아도 호출할 수 있다.

class A {
    static value = 5;
    static cal() {
        // 정적 메소드는 this를 사용할 수 없다.
        // 정적 메소드 내부에서 this는 클래스의 인스턴스가 아닌
        // 클래스 자신을 가리킨다.
        return 'cal';
    }
}

console.log(A.value); // 5
console.log(A.cal()); // cal

const AA = new A();
AA.cal(); // 타입 오류, 정적 메소드는 인스턴스로 호출할 수 없다

참고 자료


Do it 타입스크립트 프로그래밍

Typescript-Handbook