객체지향프로그래밍
[SOLID 원칙] 3. Liskov Substitution Principle 리스코프 치환 원칙
개발새발
2022. 1. 9. 20:46
반응형
Liskov Substitution Principle 리스코프 치환 원칙
정의 : Derived class는 Base class로 반드시 대체 될 수 있어야 한다.
예를 들어 아래와 같은 관계의 클래스가 있을 때
Base myBase = new Derived();
myBase.funcA();
myBase.funcB();
myBase.funcC();
myBase.funcD();
리스코프 치환 원칙을 위반한 예
Base로 치환된 new Derived가 코드가 문제 없이 모든 메소드를 호출할 수 있어야 한다.
위의 코드가 안되는 경우가 있을까? 아마 java나 c++에서는 컴파일 에러를 발생시키기 때문에 코드 실행이 안되는 경우는 없을 것이다.
그러나 논리적으로 안되게 하는 방법이 있는데 그 예는 java.util.Date와 java.sql.Date에서 찾을 수 있다.
java.sql.Date는 java.util.Date를 상속해서 구현되었지만 java.util.Date에 있는 메소드 getDate를 사용할 수 없다(Deprecated)
이러한 경우 LSP원칙을 위반한 경우이다. LSP원칙을 위반하게 되면 아래와 같은 부작용이 발생하는데
LSP원칙이 깨짐으로써 OCP까지 위반하게 된다.
void printDate(java.util.Date myDate) {
if(myDate instance of(java.sql.Date))
throw exception;
...
}
반응형