Typescript Day 04 - 클래스
01 Jun 2021 | TypescriptTypescript 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(); // 타입 오류, 정적 메소드는 인스턴스로 호출할 수 없다