나는 당신이 LSP를 위반할 것이라고 생각합니다. Wikipedia page for LSP에서
(즉, 항상 당신의 친구입니다) :
"추가 공식적으로 Liskov 대체 원칙 (LSP)이 (강한) 행동 하위 유형이라는 하위 유형 관계의 특정 정의입니다"
는 "행동 하위 유형은 인수 형식 및 반환 형식의 공분산의 contravariance에만 의존 유형 이론에 정의 된 함수의 일반적인 하위 유형보다 더 강한 개념이다. 행동 하위 유형은 일반적으로 하찮게 결정 불가능하다"
LSP는 getter와 setter 메소드는 폭과 높이가 모두 존재하는 가정, 사각형 클래스에서 파생되는 광장 클래스 위반
"전형적인 예 :
귀하의 경우와 비슷합니다. Square 클래스는 폭이 높이와 항상 같다고 가정합니다. Rectangle이 예상되는 컨텍스트에서 Square 개체를 사용하면 Square의 크기를 독립적으로 수정할 수 없으므로 (또는 오히려 변형해서는 안 됨) 예상치 못한 동작이 발생할 수 있습니다. 이 문제는 쉽게 해결할 수 없습니다 : Square 클래스의 setter 메소드를 수정하여 Square 불변량을 유지 (즉, 치수를 동일하게 유지) 할 수 있다면,이 메소드는 Rectangle setter에 대한 사후 조건을 약화 (위반)합니다. 차원을 독립적으로 수정할 수 있다고 설명합니다. LSP의 위반은, 이것처럼, 또는 관행 "나는 LSP를 이해
일부 코드를 알려주십시오. 훨씬 더 명확해질 것입니다. –
수업 상속이 여기로가는 길은 아닌 것처럼 들립니다. 파생 클래스를 투명하게 기본 클래스로 대체 할 수 있다면 상속은 거의 항상 의미가 있습니다. – helpermethod
Liskov 대체 원리를 어기는 것은 결코 좋은 생각이 아니므로 이것을 정당화하기 위해서는 정말로 강력한 주장을해야합니다. – Jesper