Tuist를 사용해보자 라는 관점에서 시작됬던 프로젝트가 하나씩 공부하다보니 Tuist를 제대로 사용하기 위해 모듈화가 필요하다
생각이 들었고 모듈화를 공부하다보니 자연스럽게 clean architecture를 접하게 되어 기존의 프로젝트를 clean architecture로 변경하는 과정을 거친후 모듈화를 진행을 할려고한다.
그렇다면 clean architecture가 무엇인가?
내가 설명을 기깔나게 잘한다면 정말 좋겠지만 설명을 못하기에 잘 정리가되어있는 글 들을 첨부한다.
https://github.com/kudoleh/iOS-Clean-Architecture-MVVM
https://tech.olx.com/clean-architecture-and-mvvm-on-ios-c9d167d9f5b3
https://github.com/sergdort/CleanArchitectureRxSwift
내가 생각하는 Clean Architecture에서 내가 생각한 중요포인트는 소프트웨어를 계층으로 나눠 관심사를 분리 , 의존성 역전 , 절대 내부의 계층이 외부의 계층을 알 지 않는다.
이 그림을 예로 들면 절대 Domian는 Platform를 알 수 없고 Platform는 Application을 알 수 없다.
(클론 코딩을 진행한 Clean Architecture의 설명이고 해당 깃헙 자료를 보며 공부를 했다.)
이렇게 Clean Architecture의 공부를 진행하면서 내가 가진 프로젝트를 하나 하나씩 변경하기 시작했다
우선 내부의 영역인 Domain 영역부터 구축을 시작하였고
기존에 사용하던 DataModel 을 이쪽으로 변경을 진행하였고
Intreface에 내가 제공할 UseCase를 공급할 Interface를 생성하고
내가 필요한 UseCase에 대한 Interface를 구축하였다.
(사이드 프로젝트에서는 이미지 검색 이외의 필요한 UseCase가 없어 하나만 만들었다.)
그 후 만든 레이어는 NetworkPlatform을 만들었고 이 곳은 실제로 데이터 통신을 진행을 하는 레이어라고 보면 될 것 같다.
API에 사용할 API를 정의 하였고
Entires에는 요청 , 응답 모델들이 모여있다
Network에는 통신을 실질적으로 진행하는 코드가 들어있다.
UseCase에서는 Domain에서 만들어준 Interface기반으로 ViewModel에서 사용할 UseCase를 만들어준다.
여기서는 내가 이해한대로 코드를 작성하였는데 ImageSearchNetwork를 UseCase에 전달하여 데이터를 통신하는데
여기서 내가 RestAPI 통신이아닌 Realm , CoreData 등 다른 데이터 리턴값을 만들어준다면
ImageSearchUseCaseInterface 를 상속받은 다른 ImageSearchUseCase를 만들고 사용하면 된다.
흐음.. 작업해놓은 것들은 많은데 글을 쓰는 재주가 없어서 일단 여기까지만 적고 나머지는 내일 적어볼려고한다.
지금 아래에 있는 깃허브 링크를 들어가게되면 전문 코드를 볼 수 있습니다. 공부는 편한데 글쓰기는 너무어렵다.
하고 싶은 이야기가 너무 많은데 말로는 할 수 있는데 글로 표현하기에는 좀 어렵다.
https://github.com/gnejfejf2/TuistTestApp/tree/20220413Tuist4
'Swift 공부' 카테고리의 다른 글
Hashable , Equatable , Identifiable (0) | 2022.04.18 |
---|---|
Tuist 3.x 라이브러리 등록 방법 (0) | 2022.04.17 |
ViewModel에 Driver를 사용하면 안티패턴? (2) | 2022.04.14 |
RxSwift Disposable 이란? (0) | 2022.04.13 |
Property Wrapper (0) | 2022.04.12 |