[Flutter] 의존성 역전부터 계층 구조까지, 클린 아키텍처 완전 해부

서연·2025년 9월 18일
post-thumbnail

📖 Clean Architecture

📌 Clean Architecture // 계층으로 나누어서 개발하는 아키텍처
----------------------------------------------------------------
📌 Presentation Layer // UI, ViewModel 등
     ├── UI와 같은 화면 표시 및 사용자 입력 처리하는 계층
     ├── 사용자가 버튼 누르면 ViewModel이 반응하고 UseCase를 실행
     └── 즉, 사용자와 직접 만나는 앞 무대
----------------------------------------------------------------
📌 Domain Layer // UseCase, Entity
     ├── 시스템의 비즈니스 로직 즉 앱의 핵심 로직이 들어있는 계층
     └── 즉, 앱에서 진짜 하고 싶은 일로 핵심 뇌
----------------------------------------------------------------
📌 Data Layer // Repository, DataSource
     ├── DB나 외부 API 등 데이터 소스와 관련된 작업을 처리하는 계층
     ├── 데이터를 어디서 가져올지 관리하는 계층
     ├── DataSource는 직접 통신해서 데이터 CRUD 기능 정리
     ├── Repository는 DataSource에서 받은 데이터 정리해서 Domain Layer에 넘기기
     └── 즉, 백스테이지, 데이터 심부름꾼
----------------------------------------------------------------
📌 나누는 이유
     ├── 유지 보수 편함
     └── 테스트가 쉬워짐
----------------------------------------------------------------
📌 Interface를 두는 이유
     ├── Domain은 interface만 알고 있고 Data Layer에서 interface를 실제로 구현
     ├──  주방장(Usecase)는 창고(Repository)가 어떻게 생겼는지는 모르고 창고 관리 규칙(Interface)만 알면 됨
     ├── Repository도 DataSource에 의존하지 않고 DataSource Interface를 둠
     ├── 창고(Repository)는 마트(DataSource)가 어떻게 운영되는지 몰라도 가져오는 방법(Interface)만 알면 됨
     └── DataSource가 가져온 재료(DTO)를 창고(Repository)에서 손질해서 주방(UseCase)로 전달

0개의 댓글