//javascript
// 추상 클래스 붕어빵틀
class 붕어빵틀 {
constructor() {
if (new.target === 붕어빵틀) {
throw new Error("추상 클래스는 인스턴스화할 수 없습니다.");
}
}
// 추상 메서드: 붕어빵을 만드는 메서드
만들기() {
throw new Error("이 메서드는 서브클래스에서 구현해야 합니다.");
}
}
// 일반 클래스 붕어빵
class 붕어빵 extends 붕어빵틀 {
constructor(속재료) {
super(); // 부모 클래스의 생성자 호출
this.속재료 = 속재료;
}
// 붕어빵 만들기 구현
만들기() {
console.log(`붕어빵을 만들고 있습니다! 속재료: ${this.속재료}`);
}
}
// 일반 클래스 사용
const 붕어빵1 = new 붕어빵("팥");
붕어빵1.만들기(); // 붕어빵을 만들고 있습니다! 속재료: 팥
const 붕어빵2 = new 붕어빵("크림");
붕어빵2.만들기(); // 붕어빵을 만들고 있습니다! 속재료: 크림
// 추상 클래스의 인스턴스화 시도
try {
const 틀 = new 붕어빵틀(); // 오류 발생
} catch (error) {
console.error(error.message); // 추상 클래스는 인스턴스화할 수 없습니다.
}
//typescript
// 추상 클래스 붕어빵틀
abstract class 붕어빵틀 {
constructor() {
// 추상 클래스는 인스턴스화할 수 없도록 합니다.
if (new.target === 붕어빵틀) {
throw new Error("추상 클래스는 인스턴스화할 수 없습니다.");
}
}
// 추상 메서드: 붕어빵을 만드는 메서드
abstract 만들기(): void;
}
// 일반 클래스 붕어빵
class 붕어빵 extends 붕어빵틀 {
private 속재료: string;
constructor(속재료: string) {
super(); // 부모 클래스의 생성자 호출
this.속재료 = 속재료;
}
// 붕어빵 만들기 구현
만들기(): void {
console.log(`붕어빵을 만들고 있습니다! 속재료: ${this.속재료}`);
}
}
// 일반 클래스 사용
const 붕어빵1 = new 붕어빵("팥");
붕어빵1.만들기(); // 붕어빵을 만들고 있습니다! 속재료: 팥
const 붕어빵2 = new 붕어빵("크림");
붕어빵2.만들기(); // 붕어빵을 만들고 있습니다! 속재료: 크림
// 추상 클래스의 인스턴스화 시도
try {
const 틀 = new 붕어빵틀(); // 오류 발생
} catch (error) {
console.error(error.message); // 추상 클래스는 인스턴스화할 수 없습니다.
}
객체지향 공부할때 공부했던 클래스....
정말 이해가 가지 않지만 이 비유 하나면 개념 정리 완~
대학교때 교수님께서 알려주셨던 .... 붕어빵이 기억나서 붕어빵에 비유해서 정리해보니 훨씬 더 친근하게 다가왔고 이해가 잘됐다!!!
붕어빵은 맛도 좋은데 비유도 좋다니^^ 덕분에 클래스와 조금 더 친해졌다.
올 겨울엔 붕어빵 좀 사먹어야겠다.