반응형
이번 장에서는 SOLID 원칙 중 LSP에 대해 다뤄보자.
SOLID 원칙 시리즈
해당 시리즈는 로버트 C.마틴의 Clean Architecture 책을 보며 쉬운 이해를 위해 ChatGPT와 함께 공부한 내용을 정리해 놓은 글입니다.
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!" 출력
만약 동작하지 않는 경우가 발생하면, 해당 하위 타입에 대해 예외 사항을 두어야 하고, 이는 시스템이 오염되어 추후 추가 수정이 아주 많아질 수 있다.
반응형
'컴퓨터공학' 카테고리의 다른 글
[Clean Architecture] - SOLID 원칙 DIP (5) (0) | 2025.01.28 |
---|---|
[Clean Architecture] - SOLID 원칙 OCP (2) (0) | 2025.01.26 |
[Clean Architecture] - SOLID 원칙 SRP (1) (0) | 2025.01.26 |
cl.exe 환경 변수 설정 (0) | 2024.06.26 |
CUDA toolkit 버전 바꾸는 법 (0) | 2024.06.25 |