폴더 구조
2024년 12월 2일1분 미만기술문서
Flutter 폴더 구조 (Folder Structure)
Flutter 애플리케이션 개발에서 폴더 구조는 코드의 가독성과 유지보수성을 크게 좌우합니다. 올바른 폴더 구조는 개발자가 효율적으로 작업할 수 있도록 도와주며, 프로젝트의 확장성을 높이는 데 기여합니다.
본 문서에서는 레이어 우선 구조와 기능 우선 구조 두 가지 주요 폴더 구조와 각 방식의 장단점, 활용 사례에 대해 설명드리겠습니다.
레이어 우선 구조 (Layer-First Structure)
레이어 우선 구조는 코드의 기능보다는 계층에 중점을 두고 폴더를 구성하는 방식입니다. 이 방식은 데이터(data), 도메인(domain), 프레젠테이션(presentation) 등의 레이어를 명확히 나누어 설계합니다.
예시 폴더 구조
- lib
- data
- remote
- repositories
- a_repository_impl.dart
- b_repository_impl.dart
- models
- a_model.dart
- b_model.dart
- services
- a_service.dart
- b_service.dart
- data_provider.dart
- domain
- entities
- a_entity.dart
- b_entity.dart
- repositories
- a_repository.dart
- b_repository.dart
- usecases
- featureA
- get.dart
- get_many.dart
- featureB
- get.dart
- get_by_filter.dart
- providers
- feature_a_usecase_provider.dart
- feature_b_usecase_provider.dart
- presentation
- states
- a_state_provider.dart
- b_state_provider.dart
- pages
- pageA
- a_page.dart
- pageB
- b_page.dart
- widgets
- a_widget.dart
- b_widget.dart
- main.dart장점
명확한 계층 구분
- 각 레이어가 명확히 구분되어 있어 코드의 역할과 책임이 명확합니다.
코드 재사용성
- 도메인 계층에서 정의된 로직을 다른 기능에서도 재사용할 수 있습니다.
확장 용이성
- 새로운 기능 추가 시 기존 레이어를 확장하거나 레이어 간 의존성을 관리하기 쉽습니다.
기능 우선 구조 (Feature-First Structure)
기능 우선 구조는 애플리케이션의 기능별로 폴더를 구성하는 방식입니다. 각 기능별로 데이터(data), 도메인(domain), 프레젠테이션(presentation) 계층을 나누어 관리합니다.
예시 폴더 구조
- lib
- features
- featureA
- domain
- entity
- a_entity.dart
- repository
- a_repository.dart
- usecases
- get.dart
- get_many.dart
- data
- repositories
- a_repository_impl.dart
- models
- a_model.dart
- services
- a_service.dart
- data_provider.dart
- providers
- feature_a_usecase_provider.dart
- featureB
- domain
- entity
- b_entity.dart
- repository
- b_repository.dart
- usecases
- get.dart
- get_by_filter.dart
- data
- repositories
- b_repository_impl.dart
- models
- b_model.dart
- services
- b_service.dart
- data_provider.dart
- providers
- feature_b_usecase_provider.dart
- presentation
- states
- a_state_provider.dart
- b_state_provider.dart
- pages
- pageA
- a_page.dart
- pageB
- b_page.dart
- widgets
- a_widget.dart
- b_widget.dart
- main.dart장점
기능 중심 설계
- 기능별로 코드를 나누기 때문에 특정 기능을 찾거나 수정하는 데 용이합니다.
독립적인 기능 관리
- 각 기능이 독립적으로 관리되어, 새로운 기능 추가 또는 수정 시 다른 기능에 영향을 덜 미칩니다.
테스트 용이성
- 기능 단위로 테스트를 작성하고 유지 관리하기 쉽습니다.
두 가지 구조 비교
| 기준 | 레이어 우선 구조 | 기능 우선 구조 |
|---|---|---|
| 구조의 명확성 | 명확한 계층 구분 | 기능별 코드 관리가 용이 |
| 확장성 | 높은 확장성 | 기능 단위 확장성 우수 |
| 코드 탐색 용이성 | 계층별 탐색 | 기능별 탐색 |
| 적합한 프로젝트 | 대규모 프로젝트 | 중소규모 프로젝트 |
- 레이어 우선 구조는 대규모 프로젝트나 복잡한 애플리케이션에 적합합니다. 여러 기능 간 의존성이 높은 경우, 이 구조를 선택하면 코드 관리가 용이합니다.
- 기능 우선 구조는 중소규모 프로젝트에서 빠르고 직관적인 개발을 지원합니다. 독립적인 기능 개발이 가능하며 유지보수도 간단합니다.
- 프로젝트의 규모와 복잡성, 팀의 요구 사항을 고려하여 적합한 폴더 구조를 선택하시길 권장드립니다.
참고 자료
기업자
abdulaziz박종열