-
[iOS] Clean ArchitectureiOS 2023. 1. 22. 20:37
Clean Architecture 에 대해 알아보도록 합시다.
iOS 개발 시 다양한 디자인 패턴이 존재하는데,
아직까지 대부분의 프로젝트에서는 MVVM 패턴을 많이 사용하는 것 같아요.
로버트.C.마틴 뭐시기 어떤분이 썼다고는 하는데 거기까지는 알 필요 없으니 넘어가도록 합시당
궁금하신 분은 여기서 확인 ㄱㄱ (https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html)
Clean Coder Blog
The Clean Architecture 13 August 2012 Over the last several years we’ve seen a whole range of ideas regarding the architecture of systems. These include: Though these architectures all vary somewhat in their details, they are very similar. They all have
blog.cleancoder.com
클린 아키텍처가 뭔가요
Soc(Separate of Concerns) 관심사의 분리를 하여 관리하는 의존 규칙이 있긴한데..
걍 우선은 3개의 계층(layer)으로 나누어서
각자의 할일을 나눈다고만 생각하고 넘어갑시다.

- Presentation Layer -> 화면에 직접적으로 보이도록 하는 역할
- Domain Layer -> 비즈니스 로직, 즉 데이터들을 입맛에 맞게 가공하고 변환하는 곳?
- Data Layer -> 데이터 가져오는 역할
(제 맘대로 해석한거니 정확하진 않습니다..)
그래서 이걸 어떻게 쓰면 되느냐
간단합니다.
아래 사진처럼 폴더 구조를 만들면 끝입니다!
정신없으니 핵심적이고 중요한 것만 빠르게 정리해보겠습니다.

우선 맨 위에 있는 Domain Layer 부터 확인해보죠

- Entity: Model 형태로 데이터들을 선언해놓음. ex. 영화목록Model, 영화상세Model..
- UseCase: 비즈니스 로직 ex. 영화 목록 가져와줘, 영화 상세 내용 가져와줘
다음으로는 Presentation Layer 를 보도록 하죠

- viewModel: useCase 를 호출해서 view가 load 되거나 update 됩니다
- view: 말그대로 화면을 보여줍니다
마지막으로 Data Layer 입니다.

- repository: 실제로 API 를 쏴서 데이터를 가져오는 곳 ex. fetch영화목록()
그래서 요약해보자면,
만약에 예시로 영화 목록을 조회하는 기능을 만들고 싶다!
그러려면 우선 API를 쏴서 영화 목록 데이터를 가져와야겠죠?
아래의 순서대로 함수 호출을 하면 됩니다.
영화목록view -> 영화목록viewModel -> 영화useCase -> 영화repository
그 다음 가져온 데이터를 view에 띄워야겠죠?
entity 형태로 API response를 받아오게 됩니다.
이 entity 를 view 에 전달해서 화면에 그려주면 끝입니다!!!!!
최대한 간단하게 써보려 노력했는데 틀린 내용이 있을 수도 있으니 참고만 부탁드립니다!
잘못된 내용은 댓글에 남겨주시면 수정하도록 하겠습니다!!
자세한 내용은 아래 깃허브 링크 참고 부탁드립니다~
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
'iOS' 카테고리의 다른 글
신입 iOS 개발자 1년간의 회고 (2) 2023.09.30 [RxSwift] Subscribe, Bind, Driver (0) 2023.06.25 [RxSwift] Subject, Relay (0) 2023.05.31 [iOS] isUserInteractionEnabled (0) 2023.02.28