리셋 되지 말자

LSP - 리스코프 치환 원칙 본문

Java(폐지)/객체지향 설계 5원칙-SOLID

LSP - 리스코프 치환 원칙

kyeongjun-dev 2020. 7. 20. 20:58

LSP-개방 폐쇄 원칙

"서브 타입은 언제나 자신의 기반 타입(base type)으로 교체할 수 있어야 한다." - 로버트 C. 마틴

객체 지향에서의 상속은 계층도가 아닌 분류도가 돼야 한다. 따라서 객체 지향의 상속은 아래의 조건을 만족해야 한다.

  1. 하위 클래스 is a kind of 상위 클래스 : 하위 분류는 상위 분류의 한 종류이다.

  2. 구현 클래스 is able to 인터페이스 : 구현 분류는 인터페이스할 수 있어야 한다.

계층도 형태의 클래스

아버지를 상위 클래스(base type)으로 하는 딸 이라는 하위 클래스(sub type)가 있다고 가정한다.
전형적인 계층도 형태이며, 객체 지향의 상속을 잘못 적용한 예다.

아버지 춘향이 = new 딸();

춘향이가 아버지의 역할도 해야한다. -> 이상하다. = LSP 위반

동물 뽀로로 = new 펭귄();

펭귄 한 마리가 태어나 뽀로로라 이름짓고 동물의 행위(메서드)를 하게 한다. -> 전형 이상하지 않다. = LSP 만족

LSP 의역


"하위 클래스의 인스턴스는 상위형 객체 참조 변수에 대입해 상위 클래스의 인스턴스 역할을 하는데 문제가 없어야 한다."

 

- 고래가 포유류의 역할을 하는데 아무 문제가 없다.

- 고래가 동물 역할을 하는데 아무 문제가 없다.

-> 하위 클래스가 상위 클래스의 역할을 하는데 아무런 문제가 없다.

'Java(폐지) > 객체지향 설계 5원칙-SOLID' 카테고리의 다른 글

SRP와 ISP  (0) 2020.07.21
ISP - 인터페이스 분리 원칙  (0) 2020.07.21
OCP - 개방 폐쇄 원칙  (0) 2020.07.20
SRP-단일 책임 원칙  (0) 2020.07.20
객체 지향 설계 5원칙 - SOLID  (0) 2020.07.20
Comments