TypeScript
TypeScript : 객체 지향 프로그래밍 - 2 (추상 클래스, 인터페이스)
고래고래00
2024. 7. 2. 20:10
03. 추상 클래스
추상 클래스의 정의
- 추상 클래스는 클래스와는 다르게 인스턴스화를 할 수 없는 클래스
추상 클래스가 있는 이유
- 추상 클래스의 목적은 상속을 통해 자식 클래스에서 메서드를 제각각 구현하도록 강제 하는 용도
- 추상 클래스도 최소한의 기본 메서드는 정의
- 하지만, 핵심 기능의 구현은 전부 자식 클래스에게 위임을 하는 것
추상 클래스 사용 방법
- 추상 클래스 및 추상 함수는 abstract 키워드를 사용하여 정의
- 추상 클래스는 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();
- Shape 클래스의 abstract getArea(): number; 를 주목해주세요. 이 코드가 바로 추상 함수
- 이 추상 클래스를 상속 받은 자식 클래스들은 반드시 getArea 함수를 구현해야 함
04. 인터페이스
- 인터페이스는 TypeScript에서 객체의 타입을 정의하는데 사용
- 인터페이스는 객체가 가져야 하는 속성과 메서드를 정의
- 인터페이스를 구현한 객체는 인터페이스를 반드시 준수, 규약과 같아서 어길 수 없음
- 인터페이스를 사용하면 코드의 안정성을 높이고 유지 보수성 향상
구현부 제공 여부
- 추상 클래스
- 클래스의 기본 구현을 제공
- 인터페이스
- 객체의 구조만을 정의하고 기본 구현을 제공 X
상속 메커니즘
- 추상 클래스
- 단일 상속만 지원
- 인터페이스
- 다중 상속을 지원
- 하나의 클래스는 여러 인터페이스 구현 가능
구현 메커니즘
- 추상 클래스
- 추상 클래스를 상속받은 자식 클래스는 반드시 추상 함수를 구현해야 함
- 인터페이스
- 인터페이스를 구현하는 클래스는 인터페이스에 정의된 모든 메서드를 전부 구현해야 함
적절한 사용처
- 기본 구현을 제공하고 상속을 통해 확장하는데 초점을 맞추고 싶다면 → 추상 클래스
- 객체가 완벽하게 특정 구조를 준수하도록 강제하고 싶다면 → 인터페이스