상속을 사용해서 좋은지 나쁜지를 판단할 때에는 리스코프의 치환원칙을 사용합니다.
Child 클래스가 Parent 클래스의 서브클래스라고 해봅시다.
리스코프의 치환원칙은 "Parent형의 변수에 Child 클래스의 인스턴스를 대입해도 문제없이 사용할 수 있다" 라는 원칙입니다.
위 처럼 Parent를 상속받은 Child의 인스턴스로 Parent의 메소드인 foo나 bar를 호출해도 아무런 문제없이 잘 실행이 되어야 한다는 것입니다.
그런데 만약 Child에서는 foo라는 메소드는 제대로 구현이 되지 않아서 UnsupportedOperationException이 throw 되도록 구현해 놓았다면
이는 리스코프의 치환원칙에 위배되는 것입니다.
참고: http://www.objectmentor.com/resources/articles/lsp.pdf
FUNCTIONS THAT USE POINTERS OR REFERENCES TO BASE
CLASSES MUST BE ABLE TO USE OBJECTS OF DERIVED CLASSES
WITHOUT KNOWING IT.
Child 클래스가 Parent 클래스의 서브클래스라고 해봅시다.
리스코프의 치환원칙은 "Parent형의 변수에 Child 클래스의 인스턴스를 대입해도 문제없이 사용할 수 있다" 라는 원칙입니다.
그런데 만약 Child에서는 foo라는 메소드는 제대로 구현이 되지 않아서 UnsupportedOperationException이 throw 되도록 구현해 놓았다면
이는 리스코프의 치환원칙에 위배되는 것입니다.
참고: http://www.objectmentor.com/resources/articles/lsp.pdf
|
'Archive' 카테고리의 다른 글
Encapsulate Collection (컬렉션의 캡슐화) (0) | 2012.01.25 |
---|---|
Introduce Explaining Variable (설명용 변수의 도입) (0) | 2012.01.25 |
Chain Constructors (연쇄 생성자) (0) | 2012.01.24 |
Dependency Injection (의존성 주입) (0) | 2012.01.24 |
Enum을 사용한 State 패턴 (0) | 2012.01.24 |