TypeScript의 Liskov 대체 원칙
When extending a class, remember that you should be able to pass objects of the subclass in place of objects of the parent class without breaking the client code.
이 원칙의 목표는 하위 클래스가 상위 클래스의 동작과 호환되는 상태를 유지하는 것입니다. 하위 클래스는 상위 클래스의 동작을 확장해야 하며 다른 것으로 대체해서는 안 됩니다.
이 원칙을 따르면 클라이언트 코드를 손상시키지 않고 부모 클래스를 하위 클래스로 바꿀 수 있습니다.
주문을 받는 애플리케이션이 있다고 상상해 보십시오. 주문에는 초안 또는 확인의 두 가지 상태가 있습니다. 주문이 확인되지 않으면 결제가 불가능합니다.
다음 예에서는 상위 클래스에 오류가 발생하지 않는 메서드
markAsPaid
가 있으므로 대체 원칙을 깨고 있습니다. 반대로 하위 클래스DraftOrder
는 발주 주문을 지불할 수 없기 때문에 해당 메서드에서 오류를 발생시킵니다. 부모 클래스Order
를 하위 클래스DraftOrder
로 교체하면 markAsPaid
를 호출하는 경우 코드가 손상될 수 있습니다.class Order {
id: number;
items: string[];
payed: boolean;
// constructor
markAsPaid(): void {
this.payed = true;
}
}
class DraftOrder extends Order {
markAsPaid(): void {
throw new Error("Draft orders can't be payed");
}
}
초안 주문을 상위 클래스로 만들고 확정된 주문을 하위 클래스로 만들어 이를 개선할 수 있습니다. 이렇게 하면 코드를 손상시키지 않고 상위 클래스를 하위 클래스로 대체할 수 있습니다.
class Order {
id: number;
items: string[];
// constructor
}
class ConfirmedOrder extends Order {
payed: boolean;
// constructor
markAsPaid(): void {
this.payed = true;
}
}
Reference
이 문제에 관하여(TypeScript의 Liskov 대체 원칙), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/jmalvarez/liskov-substitution-principle-in-typescript-3i87텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)