서론
이번 글에서는 L에 속하는 리스코브 원칙에 대해 알아보려한다.
객체지향 설계 5대 원칙
- SRP(Single Responsibility Principle): 단일 책임 원칙
- OCP(Open Closed Priciple): 개방 폐쇄 원칙
- LSP(Liskov Substitution Priciple): 리스코프 치환 원칙
- ISP(Interface Segregation Principle): 인터페이스 분리 원칙
- DIP(Dependency Inversion Principle): 의존 역전 원칙
LSP(Liskov Substitution Priciple) - 리스코프 치환 원칙이란?
서브 타입은 언제든 자신의 기반(부모) 타입으로 교체할 수 있어야 한다는 원칙을 말한다. 이 말을 다시 말해 객체의 상속관계에서 자식 클래스는 언제든 부모 타입으로 교체할 수 있다는 말을 말한다.
상속관계에서 자식 클래스는 최소한 자신의 부모 클래스에서 가능한 행위는 수행할 수 있어야다는 개념을 말하며, 이 상위와 자식의 관계는 논리적으로 들어맞아야 한다.
잘못된 예시 ex) 할아버지 첫째 사촌형 = new 사촌형();
위의 예시 이미지처럼 상 하위 관계가 정해지면 논리적 관계가 맞지않다. 사촌형이 할아버지 역할로 교체할 수 있는가? 당연히 이것은 논리에 맞지않는다. 이제 여기서 어떤 논리를 말하는 것인지 이해는 갈 것이라 생각한다.
옳은 예시 ex) 동물 향유고래 = new 고래();
위의 옳은 예시로 보면 동물이라는 최상위 타입은 하위의 모든 타입을 교체할 수 있다. 이런식으로 상 하위 관계를 나눌 때에도 논리적으로 맞는 구조로 설계하여 작성해야하한다.
예시
public interface Animal {
void eat(String food);
void sleep();
}
public class Whale implements Animal {
@Override
public eat(String food){
System.out.println(food + "을/를 먹다.");
}
@Override
public sleep(){
System.out.println("잔다.");
}
}
위와 같이 예시를 작성할 수 있다. 고래(Whale)는 동물(Animal)에게 상속받아 사용하는 것이 위의 예시와 같다고 보면 된다. 상위 클래스에서 동물이라면 해야하는 부분을 지정해주고 그 동물에 속하는 종들은 해당 행동(메서드)들을 반드시 이행 해야한다.
이런 방식으로 상위와 하위간의 관계를 생각하여 LSP의 원칙에 기반하여 잘 설계해보자.
'Programming > Java' 카테고리의 다른 글
[Java] SOLID - 의존성 역전 원칙 (DIP / Dependency Inversion Principle)이란? (개념/ 예제) (1) | 2022.05.12 |
---|---|
[Java] SOLID - 인터페이스 분리 원칙 (ISP / Interface Segregation Principle)이란? (개념/ 예제) (0) | 2022.05.12 |
[JAVA] SOLID - 개방 폐쇄 원칙 OCP(Open Closed Principle) (0) | 2022.03.15 |
[JAVA] SOLID - 단일 책임 원칙 SRP(Single Responsibility Principle) (3) | 2022.03.11 |
[JAVA] 문자열을 Reverse 하는 방법 (0) | 2022.03.11 |
댓글