Architecture

Clean Architecture란 무엇인가?(Data Repository Layer & Presentation Layer)(3)

1000JI 2024. 8. 12. 23:48

 

안녕하세요. 1000JI입니다 :)

2편에 이어서 Data Repository Layer에 대해 알아보는 시간을 갖도록 하겠습니다!

 

다이어그램을 다시 한 번 더 보고 가겠습니다!

 

 

Data Repository Layer

Repository, DB, API

Data Layer 같은 경우 Repository와 하나 이상의 Data Source를 포함합니다.

Repository Implementation(구체타입), API(Network), Persistence DB들이 여기에 속하게 됩니다.

Data Source는 Network 또는 CoreData or Realm 같은 내부 DB를 말하게 됩니다.

 

 

자, 그러면 Repository의 역할은 무엇일까요?

만약 Repository가 없이 DB, API를 Usecase에서 핸들링 한다면 Network 또는 DB가 변경 될 때 마다

기존 Domain 로직에 계속 영향이 가고 변경점이 많아지게 됩니다.

 

따라서 Domain Layer에 영향이 없도록 Repository 계층이 생겼고,

Repository Implementation(구체타입)까지만 변경이 미치도록 한 것 입니다.

 

앞선 2편을 보면 아시겠지만 Repository Interface를 Domain Layer에서 가지고 있습니다.

Data Layer가 아무리 변경되어도 Repository Interface가 변경되지 않는 이상 Usecase는 변경 될 일이 없게 됩니다.

 

이해 됐을까요?! :)

 

 

Presentation Layer

Presenter, UI

Entity 데이터를 표현하는데 필요한 계층입니다.

View, ViewModel, Coordinator, 애니메이션, 이벤트 핸들링 등 여기에 속합니다.

Presentation Layer는 오직 Domain Layer에 의존성을 두고 있습니다.

 

View는 그저 Presenter에서 받은 데이터나 상태에 따라 뷰의 표시를 하며,

Presenter는 사용자의 이벤트에 대해 판단하고 대응하며, 뷰에 그려지는게 어떤 의미인지와 무엇을 그려야 하는지 알고 있습니다.

 

출처: https://1000one.tistory.com/82

 

보는 것 처럼 ViewModel이 Presenter Layer 역할을 하며, 그 외 뷰를 표출하는 View들이 UI Layer 역할을 하고 있습니다.

 


정리하면

데이터 흐름은 다음과 같이 흘러간다고 생각하면 될 것 같습니다.

  1. View에서 ViewModel에 있는 메소드를 호출(이벤트 발생)합니다.
  2. ViewModel에서 UseCase를 실행합니다.
  3. UseCase에서 Repository에서 데이터를 취합합니다.
  4. Repository는 Remote Data(Network) 또는 DB에서 데이터를 반환합니다.
  5. 반환된 데이터가 View의 아이템까지 전달되어 출력합니다.

Presentation Layer = ViewModels + Views

Domain Layer = Entities + UseCases + Repository Interfaces

Data Repository Layer = Repository Implementations + API(Network) + Persistence DB

 

지금까지 배운 내용은 위 같이 간단하게 정리 할 수 있는데,

어찌 됐든 Clean Architecture를 사용하는 이유는 역할 분리를 세밀하게 함으로써

테스트가 용이해지고 확장성, 유지보수성을 향상 시키는데 목적이 있습니다.

 

 

이렇게 해서 Clean Architecture에 대해 전반적으로 알아보았습니다.

다음 편에는 기본 예제인 영화 프로젝트 말고 제가 직접 프로젝트 하나 구성해서

코드 보며 리뷰하는 형태로 해보고자 합니다..! :)

 

궁금하신 점이 있으시다면 댓글 부탁드립니다!

감사합니다 :)


참고사이트

https://1000one.tistory.com/82

 

Swift Clean Architecture 정리

안녕하세요. 천원입니다. 오늘은 UIKit과 함께 많이 사용되는 시스템 아키텍쳐인 Clean Architecture를 정리하고자 이 글을 작성합니다. 소프트웨어 개발 방법론 중 에자일의 창시자인 로버트 C.마틴

1000one.tistory.com

https://medium.com/@hyosing92/ios-cleanarchitecture-mvvm-e1b390b18e83

 

[iOS] CleanArchitecture + MVVM

클린아키텍처와 MVVM을 사용하면서 생각한 점입니다.

medium.com

https://sunny-maneg.tistory.com/entry/iOS-%EC%84%A4%EA%B3%84%EC%97%90%EC%84%9C%EC%9D%98-Clean-Architecture

 

iOS 설계에서의 클린아키텍쳐 (Clean Architecture for iOS)

안녕하세요 써니쿠키입니다 🍪 지난 포스팅에서 Uncle Bob의 클린아키텍쳐를 정리해보았는데요. >> [ 여기! ] 오늘은 이어서 이 클린아키텍쳐를 모바일 설계에는 어떻게 적용할 수 있는지와, 예시

sunny-maneg.tistory.com

https://clamp-coding.tistory.com/466

 

[Clean Architecture] Repository Pattern in IOS

Repository Pattern Repository Pattern의 필요성 Repository Pattern을 사용하지 않은 앱은 VC or MV이 직접 데이터들을 가지게 된다. 이에 따라오는 문제가 무엇일까? 바로 유지보수이다. 앱이 커지고 화면이 많

clamp-coding.tistory.com