본문 바로가기

Swift 공부

Tuist 모듈화 공부 4편 클린아키텍처

Tuist를 사용해보자 라는 관점에서 시작됬던 프로젝트가 하나씩 공부하다보니 Tuist를 제대로 사용하기 위해 모듈화가 필요하다
생각이 들었고 모듈화를 공부하다보니 자연스럽게 clean architecture를 접하게 되어 기존의 프로젝트를 clean architecture로 변경하는 과정을 거친후 모듈화를 진행을 할려고한다. 

 

그렇다면 clean architecture가 무엇인가?

 

내가 설명을 기깔나게 잘한다면 정말 좋겠지만 설명을 못하기에 잘 정리가되어있는 글 들을 첨부한다.

 

https://k-elon.tistory.com/38

 

Clean Architecture 란 ?

안녕하세요 ! 국산 엘런 입니다 :) Robert C Martin(Uncle Bob) 형님이 블로그에 기재하시면서 화재가 된 것이 Clean Architecture 입니다. Clean Architecture 에 대한 소개에 앞서 알아야할 개념 두가지, Busine..

k-elon.tistory.com

 

https://github.com/kudoleh/iOS-Clean-Architecture-MVVM

 

GitHub - kudoleh/iOS-Clean-Architecture-MVVM: Template iOS app using Clean Architecture and MVVM. Includes DIContainer, FlowCoor

Template iOS app using Clean Architecture and MVVM. Includes DIContainer, FlowCoordinator, DTO, Response Caching and one of the views in SwiftUI - GitHub - kudoleh/iOS-Clean-Architecture-MVVM: Tem...

github.com

 

https://tech.olx.com/clean-architecture-and-mvvm-on-ios-c9d167d9f5b3

 

Clean Architecture and MVVM on iOS

When we develop software it is important to not only use design patterns, but also architectural patterns. There are many different…

tech.olx.com

https://github.com/sergdort/CleanArchitectureRxSwift

 

GitHub - sergdort/CleanArchitectureRxSwift: Example of Clean Architecture of iOS app using RxSwift

Example of Clean Architecture of iOS app using RxSwift - GitHub - sergdort/CleanArchitectureRxSwift: Example of Clean Architecture of iOS app using RxSwift

github.com

 

 

내가 생각하는 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

 

GitHub - gnejfejf2/TuistTestApp

Contribute to gnejfejf2/TuistTestApp development by creating an account on GitHub.

github.com

 

'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