추상화(Abstraction)
추상화는 객체 지향 프로그래밍(OOP:Object-Oriented Programming)의 핵심 아이이디어 중 하나이다. 복잡성을 최소화하고 고급 아키텍처 문제를 해결하는데 도움이 되는 기술이며, 하위 수준의 세부 사항을 미리 구현할 필요가 없다. 상위 수준에 집중하고 나중에 세부 사항을 구현한다.
OOP에서는 두 가지 유형의 클래스가 존재한다. 추상 클래스와 구체 클래스이다. 위에서 말한 상위 수준은 추상 클래스이며 하위 수준은 구체 클래스이다.
구체 클래스
- new 키워드를 사용하여 생성할 수 있다.
추상 클래스
- 추상 클래스는 구체 클래스가 가져야 하는 속성과 함수를 설정하는 클래스
- 추상 클래스는 클래스 앞에 abstract 키워드를 사용하여 선언
- new 키워드를 사용하여 추상 클래스의 객체 인스턴스를 생성 불가
- TypeScript는 Cannot create an instance of an abstract class라는 오류를 표시
TypeScript의 추상 클래스
가장 일반적인 용도는 하위 클래스(=구체 클래스)에서 공통 동작을 찾는 것
- 추상 클래스는 객체 인스턴스화할 수 없다는 것을 알고 있다는 전제하에 사용
- 구체 클래스에 extends 키워드를 사용하여 상속
- 하위 클래스에서는 상위 클래스의 속성과 함수를 호출할 수 있다.
추상 함수
- 추상 함수는 추상 클래스에서 abstract 키워드를 사용하여 정의한다.
- 추상 함수는 구체 클래스에서 구현해야 한다.
abstract class Animal {
private _age: number;
constructor (theAge: number) {
this._age = theAge;
}
get age() {
return this._age;
}
set age(theAge: number) {
this._age = theAge;
}
// 추상 함수
public abstract makeSound(): void;
}
- 추상 함수는 구현이 존재하지 않으며, 구체 클래스에서 구현한다.
- 함수의 이름 / 반환 타입 / 매개 변수만 추상 클래스에서 정의한다.
class Dog extends Animal {
constructor(theAge: number) {
super(theAge);
}
makeSound(): void {
console.log('멍');
}
}
class Cat extends Animal {
constructor(theAge: number) {
super(theAge);
}
makeSound(): void {
console.log('야옹');
}
}
const dog: Dog = new Dog(5);
const cat: Cat = new Cat(3);
dog.makeSound(); // 멍
cat.makeSound(); // 야옹
'Javascript' 카테고리의 다른 글
글 작성 경과 시간 표시 / elapsedTime (방금 전, 몇 분 전 작성) / Javascript (0) | 2023.11.07 |
---|---|
[node.js] JavaScript heap out of memory (0) | 2023.08.29 |
[Javascript] 자료구조 (Data Structure) (0) | 2023.01.22 |
[Javascript] Lazy evaluation(지연 평가) (0) | 2023.01.19 |
[Javascript] Generator Function (0) | 2023.01.19 |