본문 바로가기

컴퓨터공학

[Clean Architecture] - SOLID 원칙 LSP (3)

반응형

이번 장에서는 SOLID 원칙 중 LSP에 대해 다뤄보자. 

 

SOLID 원칙 시리즈

해당 시리즈는 로버트 C.마틴의 Clean Architecture 책을 보며 쉬운 이해를 위해 ChatGPT와 함께 공부한 내용을 정리해 놓은 글입니다.

 

SRP: 단일 책임 원칙

OCP: 개방-폐쇄 원칙

LSP: 리스코프 치환 원칙

ISP: 인터페이스 분리 원칙

DIP: 의존성 역전 원칙


 

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

- 서브타입(자식 클래스)은 언제나 자신의 기반 타입(부모 클래스)으로 대체할 수 있어야 한다.
- 치환 가능성을 조금이라도 위배하면 시스템 아키텍처가 오염되어 상당량의 별도 매커니즘을 추가해야할 수 있다. 
 
위의 문장만 봐서는 딱 와닿지 않으니 아래 예제를 한번 보자. 
상위 클래스인 Animal과 하위 클래스인 Dog, Cat이 있다. 

class Animal:
    def make_sound(self):
        pass

class Dog(Animal):
    def make_sound(self):
        return "Woof!"

class Cat(Animal):
    def make_sound(self):
        return "Meow!"

 
 
LSP는 Animal 타입을 기대하는 코드에 Dog나 Cat 객체를 전달하더라도, 아래와 같이 코드가 올바르게 동작해야 한다는 것이다.

def animal_sound(animal: Animal):
    print(animal.make_sound())

dog = Dog()
cat = Cat()

animal_sound(dog)  # "Woof!" 출력
animal_sound(cat)  # "Meow!" 출력

 
 
만약 동작하지 않는 경우가 발생하면, 해당 하위 타입에 대해 예외 사항을 두어야 하고, 이는 시스템이 오염되어 추후 추가 수정이 아주 많아질 수 있다. 

반응형