반응형
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;
...
}
반응형
'객체지향프로그래밍' 카테고리의 다른 글
[SOLID 원칙] 5. Dependency Inversion Principle 의존관계 역전 원칙 (0) | 2022.01.16 |
---|---|
[SOLID 원칙] 4. Interface Segregation Principle 인터페이스 분리 원칙 (0) | 2022.01.16 |
[SOLID 원칙] 2. Open Closed Principle 개방-폐쇄 원칙 (0) | 2022.01.09 |
[SOLID 원칙] 1. Single Responsibility Principle 단일 책임 원칙 (0) | 2022.01.09 |
객체지향 패러다임 (0) | 2022.01.01 |