일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- tableView
- map
- 클린 코드
- 리펙터링
- MVVM
- SWIFT
- combine
- HIG
- 리팩토링
- uitableview
- swiftUI
- 스위프트
- swift documentation
- ios
- Refactoring
- UICollectionView
- rxswift
- uiscrollview
- ribs
- Human interface guide
- Clean Code
- Protocol
- Observable
- Xcode
- RxCocoa
- 애니메이션
- 리펙토링
- clean architecture
- collectionview
- UITextView
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[Clean Architecture] 4단계의 layer로 구성된 앱의 구조 본문
1. 위 구조의 장점
- Framework가 독립적이라 바꾸기 쉬움
- UI, DB, server없이 비즈니스 rules들을 테스트 가능
- UI가 독립적이라 바꾸기 쉬움 (비즈니스 rules없이 바꾸기 가능)
- DB종류에 대해 독립적 (DB종류가 바뀌어도, 바뀐 부분만 수정하면 똑같은 함수를 써서 똑같은 결과를 낼 수 있는 기대)
종합적으로, 각 레이어들이 바뀌어도 다른 레이어들이 모를 정도로 독립적인 구조라서 유지보수에 좋음
독립성: 결합도(모듈과 모듈과의 상호 의존 정도)는 낮게, 응집도(내부 모듈의 기능 집중도)는 높게
2. 위 레이어 구성을 사용할 때의 Rules 가장 중요
- 소스코드에서도 들어나야 함: 밖 layer에서 선언된 이름/함수/클래스 이름이, 내부에서 아예 불려지지 않아야함
- 4개의 layer로 꼭 안해도, 위의 rule은 꼭 지켜져야 함
3. 각 Layer 개념
1) Entities
- Enterprise Wide라는 Business Rules를 담고 있는 레이어
- 앱에서 가장 공통적인 것 (외부가 바뀌면 가장 최소한으로 변경되는 것)
2) Use Case
- application specific라는 business rules를 담고 있는 레이어
- Entities로부터 data플로우들을 지휘하는 역할
- Entities들이 enterprise wide business rules을 사용할 수 있도록 관리
3) Interface Adapters
- Entities와 UseCase가 데이터들을 편리하게 사용할 수 있도록 Adapter로 만드는 layer (DB와 Server와의 접점 ... DAO와 같은 것)
- i.e) DB종류 중 어떤것을 사용하던 간에, 이 layer는 모르고 있어야함 (getUserData, saveUserData와 같은 함수가 존재하는 레이어)
4) Frameworks and Drivers
- framework나 tool로 구성 (DB, Web framework)
- DB나 Web에 대하여 구체적으로 정의되어 있는 곳
* 출처: Robert C. Martin, 'clean code'
'Architecture (swift)' 카테고리의 다른 글
[iOS - swift] Mixin 패턴(mix-in), Traits 패턴 (0) | 2021.12.17 |
---|---|
[iOS - swift] Clean swift (VIP) 패턴 (기본 개념) (0) | 2021.02.13 |
[Architecture] Coordinator pattern, XCoordinator 프레임워크 [응용], PostTaskManager (0) | 2020.10.17 |
[Architecture] Coordinator pattern, XCoordinator 프레임워크 [개념] (0) | 2020.10.01 |
[Architecture] RxSwift, MVVM 구조 코드 (2) | 2020.09.26 |