추상 클래스(abstract)
상속을 통해서 사용하게끔 하는 클래스
추상 함수를 구현해서 직접 사용하지만
무조건 추상함수만 가지고 있는 것은 아님
일반 함수도 상속시켜서 정의하지 않고 곧바로 사용할 수도 있음.
추상 클래스는 클래스와는 다르게 인스턴스화를 할 수 없는 클래스
추상 클래스의 목적은 상속을 통해 자식 클래스에서 메서드를 제각각 구현하도록 강제를 하는 용도
다시말해, 핵심 기능 구현은 전부 자식 클래스에게 위임 하는 것
abstract
키워드를 사용하여 정의한다.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();
인터페이스(interface)
추상 클래스
사용인터페이스
사용객체지향 설계 원칙 - S.O.L.I.D
1) S (SRP. 단일 책임 원칙)
2) O (OCP. 개방 페쇄 원칙)
3) L (LSP. 리스코프 치환 원칙)
4) I (ISP. 인터페이스 분리 원칙)
5) D (DIP. 의존성 역전 원칙)
TypeScript 내용 요약 정리
☑️ JavaScript에서 파생된 기본 타입
- string
- number
- boolean
- null
- undefined
☑️ 새로 추가된 타입
- tuple
- enum
- any
- unknown
☑️ union 타입
- 여러 타입 중 하나를 가질 수 있는 타입을 정의할 때 사용
- 사용 방법: 타입1 `|` 타입2
☑️ intersection 타입
- 여러 타입의 조합을 가질 수 있는 타입을 정의할 때 사용
- 사용 방법: 타입1 `&` 타입2
☑️ 타입
- 별칭을 사용하여 새로운 타입을 정의
☑️ 인터페이스
- 객체의 구조를 정의하는 데 사용됩
- 클래스에서 구현
☑️ 클래스
- 객체의 설계도로 사용되며 생성자, 메서드, 속성 등을 포함
☑️ 상속
- 클래스 간의 관계를 정의하는 방법
- 부모 클래스의 기능을 자식 클래스가 상속
☑️ 단일 책임 원칙(SRP)
- 한 클래스는 하나의 책임만 가져야 한다.
☑️ 개방 폐쇄 원칙(OCP)
- 확장에는 열려 있고 수정에는 닫혀 있어야 한다.
☑️ 리스코프 치환 원칙(LSP)
- 서브타입은 슈퍼타입을 대체할 수 있어야 한다.
☑️ 인터페이스 분리 원칙(ISP)
- 인터페이스는 클라이언트가 필요로 하는 메서드만 제공해야 한다.
☑️ 의존성 역전 원칙(DIP)
- 추상화에 의존해야 하며 구체화에 의존하면 안된다.