-
[Flutter] Flutter에 Clean Architecture 끼얹기카테고리 없음 2024. 4. 21. 18:13
Clean Architecture(클린 아키텍처)
모바일 개발자라면 한번씩 다 들어봤을 단어 입니다.
안드로이드나 iOS 개발시에 클린 아키텍처 구조로 프로젝트를 구성하는 경우가 많았습니다.
이론은 검색하면 수만가지가 나옵니다. 아래 사진과 같이 말이죠.
간단히 설명하자면 로버트 B 마틴 이라는 개발자가 내놓은 소프트웨어 개발 방법론 입니다.
선대 개발자들이 이렇게 이렇게 ~ 개발하니깐 더 편하고 유지보수도 쉽더라.. 이런 말 입니다.
간단히 알아볼까요?
이 아키텍쳐를 작동시키는 가장 우선적인 규칙은 Dependency Rule입니다.
Dependency Rule
저 원들(Circle)은 소프트웨어 각각의 다른 영역입니다.
- 소스코드 종속성은 안쪽으로만 향할 수 있음.
- 안쪽에 있는 원들은 안에 있는 것들은 바깥족 원에 대해 아무것도 알 수 없음.
- 특히, outer circles에 선언된 이름은 inner circles에서 언급해서는 안된다. (함수, 클래스 등등)
이게 내용이 어렵긴한데요..!!!
이 화살표가 가장 중요해요.
저 화살표 대로 디펜던시를 구조를 짜놓면 자연스럽게 클린아키텍처를 따르게 됩니다.
저 원들을 실제 앱으로 구조를 짰을때는 아래와 같은 그림이 나옵니다.
잘 보시면 Data영역에도 Repositories가 있고 Domain 영역에도 있는걸 볼 수 있습니다.
왜일까요?
다시 첫번째 사진으로 돌아가서 우측하단에 있는 그림을 보겠습니다.
그림은 원 경계를 교차하는 예시인데요.
분홍색 선을 볼까요?
Controller 에서 시작하고 UseCase를 거쳐 Presenter에서 실행이 됩니다.
UseCase를 거쳐 Presenter에서 실행이 된다는 말은 즉 UseCase가 Presenter를 알게 된다는 말입니다.
말이 어렵죠? 저희가 알게 쉽게 다시 풀어서 설명해볼까요?
Controller = UI
UseCase = UseCase
Presenter = Repository
UI에서 Input이 들어오면 UseCase를 거쳐 Repository에서 실행이 된다. 입니다.
클린아키텍처의 룰이 뭐였죠? 다시 볼까요?
Dependency Rule
- 소스코드 종속성은 안쪽으로만 향할 수 있음.
- 안쪽에 있는 원들은 안에 있는 것들은 바깥족 원에 대해 아무것도 알 수 없음.
- 특히, outer circles에 선언된 이름은 inner circles에서 언급해서는 안된다. (함수, 클래스 등등)
그럼 UseCase는 Repository를 호출하게되면 저 위에있던 화살표를 어기게 됩니다.
UseCase가 안에 있는데 바깥쪽 Presenter를 알게 되니깐요.
그림으로 보면 아래와 같습니다.
다시 그림을 봅시다.
이제 해결책을 봐볼까요?
저 빨간색 네모들을 봅시다.
Input Port, OutputPort가 있습니다.
이는 "인터페이스" 이며 Dart로 치면 abstract class가 됩니다.UseCase를 인터페이스를 호출하며
Presenter는 해당 인터페이스를 구현하게 됩니다.
UseCase가 직접적으로 Presenter 구현체에 접근을 안하는게 가장 중요합니다.
그럼 다시 그림을 봐봅시다.
이 그림의 Repositories가 왜 겹치게 되는지 이제는 아시겠죠?
Domain에 레포지토리 인터페이스를 노출시키며
Data영역을 해당 레포지토리를 구현하게 됩니다.
이렇게 되면 화살표의 방향은 그대로 가면서 의존성 룰을 지키게 됩니다.
이렇게 해서 클린아키텍처에 대해 간단히 알아보았습니다.생각보다 어렵죠?
저도 처음에는 이게 무슨말인지 전혀 이해를 못했습니다. 원이 뭔지,,
저 화살표들은 뭔지.. 컨트롤러? 게이트웨이? 정말 익숙치 않은 단어들...
그럼에도 개발을 계속 접하고 다른 개발자들과 얘기를 해보면서 이해가 되었던 것 같아요!
지금 당장은 이해가 가지 않아도 되고,, 나중에라도 한번씩 기억이 나실때 찾아보는게 어떨까요? ㅎㅎ
https://hrjy6278.tistory.com/9
[Flutter] 플러터 injectable을 사용한 클린아키텍처 적용 (Clean Architecture)
안녕하세요? 지스입니다.이번에는 제가 첫글에 썼던 https://hrjy6278.tistory.com/2 이 클린아키텍처 적용부분을 실제 프로젝트에는 어떤식으로 적용시켰는지 알아보겠습니다. 일단 di를 위한 라이
hrjy6278.tistory.com
위의 글은 제가 클린아키텍처를 플러터 프로젝트에 어떻게 적용시켰는지에 대한 글입니다!