Clean Architecture!
정말 많이 들었고.. 완전하게 이해하진 않아도 조금씩 적용해 봤던 거였는데,
최근 과제전형을 진행하면서 제대로 적용하려고 공부했고 이를 잊지 않으려고 정리한다
로버트 C. 마틴 <Clean Architecture> 책에 따르면, 소프트웨어에는
집단 외부의 행위(Behavior)적 가치와 집단 내부의 구조(Structure)적 가치가 존재한다고 한다
행위적 (Behavior) 가치
집단 내 여러 이해 관계자의 기능 명세서나 요구사항 문서를 실제 프로덕트로 구현하는 Programmer의 가치
구조적 (Structure) 가치
Software 단어에서 Soft라는 본연의 목적에 맞춰 기존 행위를 쉽게 변경할 수 있어야 한다는 Developer의 가치
클린 아키텍처는 구조적 가치에 해당하는 개념으로 객체지향 5대 원칙인 SOLID를 기본적으로 알고 접근하면 이해하기 편하다,,
Clean Architecture
소프트웨어 구조를 계층화 함으로 관심사를 분리한 구조이며, 이 때 의존성 방향은 외부 계층에서 내부 계층으로 향한다
이 의존성 방향에 따르면 안에 있는 레이어들은 외부 레이어를 몰라야 한다!
또한, 의존성 역전 개념을 도입해 같이 고수준 모듈(내부 레이어)이 저수준 모듈(외부 레이어)을 의존하지 않도록 한다
+ 그래서 저수준 모듈의 프로토콜을 만들어 이를 참조하게 한다
글로 적으니까 엄청 어려워 보이네 ㅠㅠ
그래도 하나씩 직접 구현하고 적용해보면,, 익숙해지겠지
아무튼,, 클린 아키텍처의 구조는 아래 그림이 대표적이다

각 레이어를 아래와 같이 3가지 영역으로 주로 묶는다순서는 내부 레이어에서 바깥 레이어로,,
클린 아키텍처가 항상 정답은 아니고 개발자마다 정의하고 사용하는 건 다르겠지만
공부하고 적용했던 아키텍처 구조에 대해 글로 작성한다
Data 영역: Model, Repository, (Network)
Domain 영역: Entity, Use Cases, (Repository Protocol)
Presentation 영역: View, (ViewModel)
여기서 괄호는 필요에 의해 추가 혹은 빼도 되는 레이어다,,
의존성 역전을 위한 Repository Protocol, 네트워크 통신을 위한 Network 그리고 MVVM 설계를 도입하여 ViewModel
Data 영역
1. Model: 네트워크 설계에 따른 데이터 모델
2. Repository: 데이터를 실제 가공하는 역할 수행
3. Network: 외부 API 연결 통신 역할 수행
Domain 영역
1. Entity: 가장 내부 레이어로 불변하는 핵심 모델 정의
2. Use Cases: 비즈니스 로직 (중심부 역할)
3. Repository Protocol: Repository 레이어의 인터페이스
Presentation 영역
1. View 혹은 ViewController: 사용자가 보는 UI 생성
2. ViewModel: UI와 연관된 비즈니스 로직 담당
각 영역의 의존성 방향은 다음과 같다

구현 단계와 관련되서 기재한 내용이 100% 정답은 아니다!
클린 아키텍처의 가장 큰 틀은 관심사 분리로 역할을 나누고 의존성 규칙을 적용한 것 :)
+ 비지니스 로직이란? (면접때 배운 내용)
'IOS 개발지식 > iOS' 카테고리의 다른 글
| [iOS] XCTest를 활용한 UnitTest (1) | 2024.11.13 |
|---|---|
| [iOS] RxSwift와 Combine (2) | 2024.11.11 |
| [iOS] AppDelegate와 SceneDelegate (2) | 2024.11.08 |
| [iOS] 앱 생명주기(App Life Cycle) (5) | 2024.11.07 |