一键导入
flutter-clean-architecture
Flutter 클린 아키텍처 패턴 안내. feature-first 3계층(data/domain/presentation) 구조, Repository·UseCase·Riverpod 적용 시 사용.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Flutter 클린 아키텍처 패턴 안내. feature-first 3계층(data/domain/presentation) 구조, Repository·UseCase·Riverpod 적용 시 사용.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
| name | flutter-clean-architecture |
| description | Flutter 클린 아키텍처 패턴 안내. feature-first 3계층(data/domain/presentation) 구조, Repository·UseCase·Riverpod 적용 시 사용. |
lib/features/feature_name/
├── data/ # 데이터 소스, 모델, 리포지토리 구현
├── domain/ # 비즈니스 로직, 엔티티, 유스케이스/서비스
└── presentation/ # UI, Riverpod providers, 화면
API, DB, SharedPreferences 등 원시 데이터 소스.
/// API 호출, 로컬 DB 접근 등
abstract class SomeDatasource {
Future<ApiResponse> fetch();
}
API/DTO 모델. JSON 직렬화, freezed 등 사용 가능.
데이터 소스를 조합·추상화. Repository 구현체.
/// data/repositories/some_repository.dart
class SomeRepository {
SomeRepository(this._client);
final SomeApiClient _client;
Future<SomeOut> getData(SomeIn input) async {
return await _client.fetch(input);
}
}
// Provider에서 주입
final someRepositoryProvider = Provider<SomeRepository>((ref) {
final client = ref.watch(someApiClientProvider);
return SomeRepository(client);
});
순수 Dart 객체. API 모델과 분리할 수 있으나, 단순하면 API 모델 재사용 가능.
비즈니스 로직. Repository 호출, 에러 변환, 플로우 제어.
/// domain/some_service.dart
class SomeService {
SomeService({SomeRepository? repo}) : _repo = repo ?? SomeRepository();
final SomeRepository _repo;
Future<void> doSomething(SomeInput input) async {
final out = await _repo.getData(input);
// 저장, 토큰 처리 등 비즈니스 로직
}
}
Navigator, BuildContext 직접 사용 금지Repository, Datasource 주입Riverpod Provider 정의. Service/Repository 인스턴스 생성·노출.
/// presentation/providers/some_providers.dart
final someServiceProvider = Provider<SomeService>((ref) => SomeService());
final someStateProvider = FutureProvider.autoDispose<SomeState>((ref) async {
final service = ref.watch(someServiceProvider);
return service.fetchState();
});
ConsumerWidget / ConsumerStatefulWidget로 UI. ref.watch(provider)로 상태 구독.
class SomeScreen extends ConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) {
final async = ref.watch(someStateProvider);
return async.when(
data: (data) => _buildContent(data),
loading: () => const CircularProgressIndicator(),
error: (e, _) => Text('에러: $e'),
);
}
}
datasources/, models/, repositories/ 필요 시 생성entities/, use_cases/ 또는 service.dart 추가providers/, screens/ 추가ref.watch로 구독| 규모 | domain 구조 |
|---|---|
| 소규모 | service.dart 하나로 UseCase 역할 통합 |
| 중규모 | use_cases/ 폴더에 작업별 UseCase 클래스 분리 |
| 대규모 | UseCase 인터페이스 + 구현체, Repository 인터페이스 분리 |
snake_case.dartPascalCaseXxxRepositoryXxxService 또는 GetXxxUseCasexxxProvider, xxxStateProvider, xxxNotifierProviderNAVER API HUB 검색 스킬. 네이버 클라우드 NAVER API HUB로 블로그·뉴스·지역·웹·이미지 등 검색 및 검색어 트렌드 조회. "네이버 API HUB", "네이버 검색 API", "블로그 검색", "검색어 트렌드" 요청에 활성화.
Git Flow 브랜치·커밋 규칙(변경 요약은 한국어 필수). 커밋, 브랜치 생성, Git Flow, 커밋 메시지 작성 요청 시 사용.
UIKit MVVM에서 Combine 바인딩, @Published, PassthroughSubject, ObservableObject 역할, sink/cancellables 패턴. UI 상태는 @Published, 화면 이동/토스트/Alert 같은 일회성 이벤트는 PassthroughSubject. SwiftUI vs UIKit ObservableObject 차이, Combine 바인딩 설계 시 사용.
Swift Concurrency 경계 설정, @MainActor, Task 배치, UIKit MVVM async API 설계. ViewModel, @MainActor, Task, async await, Combine 바인딩, isLoading 처리 시 사용.
Swift/iOS MVVM 패턴 안내. Model·View·ViewModel 구조, 바인딩(Combine/@Published), 서비스/저장소 연동 시 사용.
SwiftUI MVVM에서 @Observable/ObservableObject 선택, @StateObject/@ObservedObject/@EnvironmentObject 사용 기준, .task/.refreshable와 취소 처리, @MainActor 상태 갱신 규칙 설계 시 사용.