Programming/Java

[JAVA] SOLID - 리스코프 치환 원칙 LSP(Liskov Substitution Principle)

JeongKyun 2022. 5. 8.
반응형

서론


이번 글에서는 L에 속하는 리스코브 원칙에 대해 알아보려한다.

 


 

객체지향 설계 5대 원칙


 


 

 

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의 원칙에 기반하여 잘 설계해보자.

댓글

💲 많이 본 글