TypeScript : 추상클래스 & 인터페이스

728x90
반응형

1. 추상클래스

- 인스턴스화를 할 수 없는 클래스

- 기본은 부모클래스가 하지만, 핵심 기능은 자식클래스에 위임하는 것

- 상속을 통해 자식클래스에서 메서드를 각각 구현하기

abstract class Shape {
  abstract getArea(): number; // 추상 함수 정의!!!

  printArea() {
    console.log(`도형 넓이: ${this.getArea()}`);
  }
}

class Circle extends Shape {
  radius: number;

  constructor(radius: number) {
    super();
    this.radius = radius;
  }

  getArea(): number { // 원의 넓이를 구하는 공식은 파이 X 반지름 X 반지름
    return Math.PI * this.radius * this.radius;
  }
}

class Rectangle extends Shape {
  width: number;
  height: number;

  constructor(width: number, height: number) {
    super();
    this.width = width;
    this.height = height;
  }

  getArea(): number { // 사각형의 넓이를 구하는 공식은 가로 X 세로
    return this.width * this.height;
  }
}

const circle = new Circle(5);
circle.printArea();

const rectangle = new Rectangle(4, 6);
rectangle.printArea();

 

 

 

2. 인터페이스

- 객체가 가져야하는 속성과 메서드를 정의

- 추상클래스와 차이

(1) 구현부 제공 여부 : 추상클래스 (기본구현 제공) / 인터페이스(객체 구조만 정의)

(2) 상속 메커니즘 : 추상클래스 (단일 상속) / 인터페이스(다중 상속 -> 하나의 클래스로 여러 인터페이스 구현)

(3) 구현 메커니즘 : 추상클래스 (반드시 추상함수 구현 필요) / 인터페이스(정의된 모든 메서드 전부 구현)

 

[사용]

=> 기본구현 제공 & 상속을 통해 확장 = 추상 클래스

=> 특정 구조를 준수하도록 강제 = 인터페이스

 

 

 

끝.

반응형