Liskov Substitution Principle (리μ€μ½ν μΉν μμΉ) νλ‘κ·Έλ¨μμ μλ£ν Sκ° μλ£ν Tμ νμνμ΄λΌλ©΄, νμν νλ‘κ·Έλ¨μ μμ± λ³κ²½ μμ΄ Tνμ μ κ°μ²΄λ₯Ό Sνμ μ κ°μ²΄λ‘ μΉνν μ μμ΄μΌ νλ€λ μμΉμ΄λ€.
LSPλ₯Ό μλ°νλ μ νμ μΈ μλ‘, λλΉμ λμ΄μ getter
, setter
λ©μλλ₯Ό κ°μ§ μ§μ¬κ°ν ν΄λμ€λ‘λΆν° μ μ¬κ°ν ν΄λμ€λ₯Ό νμνλ κ²½μ°λ₯Ό λ€ μ μλ€.
// Rectangle.ts
class Rectangle {
private width: number;
private height: number;
constructor(width: number, height: number) {
this.width = width;
this.height = height;
}
public setWidth(width: number): void {
this.width = width;
}
public setHeight(height: number): void {
this.height = height;
}
public area(): number {
return this.width * this.height;
}
}
// Square.ts
class Square extends Rectangle {
constructor(width: number, height: number) {
super(width, height);
}
public setWidth(width: number): void {
this.width = width;
this.height = width;
}
public setHeight(height: number): void {
this.width = height;
this.height = height;
}
public area(): number {
return this.width * this.height;
}
}
LSP μλ°μ LSPλ₯Ό μλ°ν ν΄λμ€λ₯Ό μ¬μ©νλ μ½λκ° μ€μ λ‘ κΈ°λνλ 쑰건μ λ°λΌ λ¬Έμ κ° λ μλ μκ³ μλμλ μλ€.
μ¬κΈ°μ μ€μν μ¬μμ κ°λ³μ±μ΄λ€.
μ μ¬κ°νκ³Ό μ§μ¬κ°νμ΄ μ‘°ν λ©μλλ§ κ°μ§λ€λ©΄, LSP μλ°μ λ°μνμ§ μλλ€.