본문

LSP(Liskov Substitution Principle) : 리스코프 치환 원칙

반응형

# LSP(Liskov Substitution Principle) : 리스코프 치환 원칙


아버지를 상위 클래스로 하는 딸이라는 하위 클래스가 있다고 하자. 바로 전형적인 계층도 형태이며, 객체 지향의 상속을 잘못 적용한 예다. 그럼 무엇이 문제인지 생각해 보자. 상위 클래스의 객체 참조 변수에는 하위 클래스의 인스턴스를 할당할 수 있다.


아버지 춘향이 = new 딸()


딱 봐도 이상하지 않은가? 딸을 하나 낳아서 이름을 춘향이라 한 것까지는 좋은데 아빠의 역할을 맡기고 있다. 춘향이는 아버지형 객체 참조 변수이기에 아버지 객체가 가진 행위(메서드)를 할 수 있어야하는데 춘향이에게 아버지의 어떤 역할을 시킬 수 있을까? 이번에는 동물 클래스와 이를 상속(확장)하는 펭귄 클래스가 있다고 해보자. 즉, 분류도 형태인 경우를 살펴보자.


동물 뽀로로 = new 펭귄()


논리적인 흠이 없다. 펭귄 한 마리가 태어나 뽀로로라 이름을 짓고 동물의 행위(메서드)를 하게 하는데 전혀 이상함이 없다. 아버지-딸 구조(계층도/조직도)는 리스코프 치환 원칙을 위배하고 있는 것이며, 동물-펭귄 구조(분류도)는 리스코프 치환 원칙을 만족하는 것이다. 


- 리스코프 치환 원칙 위반 사례 : 계층도/조직도



- 리스코프 치환 원칙 적용 사례 : 분류도



결국 리스코프 치환 원칙은 객체 지향의 상속이라는 특성을 올바르게 활용하면 자연스럽게 얻게 되는 것이다.





- 출처 및 참고자료 : 스프링 입문을 위한 자바객체지향의 원리와 이해(김종민 저)

반응형

공유

댓글