LSP는 클래스가 기본 클래스를 대체 할 수 있어야하는데 파생 클래스와 기본 클래스는 의미 적으로 동일해야합니다.
그러나 LSP는 인터페이스를 구현하는 클래스에도 적용됩니까? 다시 말해서, 클래스에 의해 구현 된 인터페이스 메소드 가 사용자가 예상 한 것과 의미 적으로 다른 경우, 이것이 LSP의 위반으로 간주됩니까?
답변
만약 클래스에 의해 구현 된 인터페이스 메소드 가 사용자가 기대하는 것과 의미 적으로 다른 경우, 이것이 LSP의 위반으로 간주됩니까?
구현이 인터페이스의 변형 및 메소드의 사전 및 사후 조건을 통해 문서화 된 동작과 의미 적으로 다른 경우, 대답은 “예”이며 LSP를 위반하는 것입니다. 이 원칙은 추상화 측면이 클래스 형태로 존재하지 않아도 추상화 및 구현에 대한 규칙을 설정합니다.
그러나 사용자가 기대 하는 것에 대해 이야기 하면 대답은 “반드시”는 아닙니다. 사용자에게는 잘못된 기대가있을 수 있습니다.