Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 애니메이션
- 리팩토링
- uitableview
- Human interface guide
- UICollectionView
- MVVM
- clean architecture
- ios
- RxCocoa
- collectionview
- UITextView
- swift documentation
- Xcode
- Clean Code
- 클린 코드
- tableView
- ribs
- swiftUI
- HIG
- Observable
- uiscrollview
- SWIFT
- Protocol
- combine
- Refactoring
- rxswift
- 리펙토링
- 스위프트
- 리펙터링
- map
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[Clean Architecture] 10. SOLID 원칙 - LSP (Liskov Substitution Principle) 본문
Clean Architecture/Clean Architecture 기초
[Clean Architecture] 10. SOLID 원칙 - LSP (Liskov Substitution Principle)
jake-kim 2021. 6. 21. 22:46LSP
- 부모 클래스의 객체 대신에 자식 클래스의 객체로 치환해도 프로그램의 행위에 변화를 주지 않아야 한다는 원칙
- 자식 클래스 or 구현체를 만들 때, 상위 타입의 객체로 치환해도 문제가 없는지 파악해야 한다는 의미
- 인터페이스를 구현한 구현체 역시도 LSP원칙을 준수
- 목적: 치환 가능성을 조금이라도 위배하면, 추후 상당량의 별도 메커니즘이 필요
정사각형 - 직사각형 문제
- 사각형의 하위 타입으로 정사각형으로 구성하면 LSP위배
- User입장에서는 Interface인 Reactangle의 성격을 생각하고 사용하지만, Square에서의 성격이 다른경우가 존재하면 오류 발생
- 그 오류를 해결하기 위해서는 상당량의 별도 매커니즘이 User에 필요하게 되는 악순환 발생
- 예시) setH, setW 호출 후 넓이 계산하는 행위를 정사각형 객체로 치환할 경우, 변화를 주는 현상
var r: Reactangle = Square()
r.setW(5)
r.setH(2)
r.area() // User입장에서는 10을 기대하고 사용하겠지만, 값으로는 4로 나오는 현상
- LSP를 지키지 않으면, 별도의 매커니즘이 추가되며 오염된 코드화
- ex) if문을 이용하여 Reactangle인지 Square인지 파악하는 매커니즘이 User로직에 추가되며, User의 행위가 사용하는 타입에 의존하게되므로 결국 타입을 서로 치환할 수 없게 되는 현상 발생
* 참고
Clean Architecture
'Clean Architecture > Clean Architecture 기초' 카테고리의 다른 글
[Clean Architecture] 12. SOLID 원칙 - DIP (Dependency Inversion Principle) (0) | 2021.06.28 |
---|---|
[Clean Architecture] 11. SOLID 원칙 - ISP (Interface Segregation Principle) (0) | 2021.06.23 |
[Clean Architecture] 9. SOLID 원칙 - OCP (Open Closed Principle) (0) | 2021.06.18 |
[Clean Architecture] 8. SOLID 원칙 - SRP (Single Responsibility Principle) (0) | 2021.06.17 |
[Clean Architecture] 7. 설계원칙 (SOLID) (0) | 2021.06.17 |
Comments