Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
Tags
- 시스템
- spring integration
- Java
- chatGPT's answer
- 파이썬
- 고전역학
- 자바
- python
- 리눅스
- 자바네트워크
- write by chatGPT
- kotlin
- spring data jpa
- mobile programming
- 소프트웨어공학
- DART
- flet
- 신재생에너지 발전설비 기사
- 인프라
- 데이터베이스
- Database
- write by GPT-4
- jpa
- 유닉스
- oracle
- GPT-4's answer
- 코틀린
- flutter
- 역학
- NIO
Archives
- Today
- Total
기억을 지배하는 기록
Dart 개발자 가이드 (코딩 스타일 & 협업 가이드) 본문
728x90
Dart 개발자 가이드 (코딩 스타일 & 협업 가이드)
Flutter 프로젝트에서 여러 개발자가 협업할 때 일관된 코드 스타일을 유지하고, 효율적으로 협업할 수 있도록 Dart 코딩 가이드를 제공한다. 아래 가이드는 Google Dart 공식 스타일 가이드를 기반으로 협업에 최적화된 내용을 포함하고 있다.
1. 코드 스타일 & 컨벤션
1.1. 코드 정리 및 자동화
코드 자동 정렬 (dart format)
모든 Dart 파일은 dart format을 사용해 자동 정렬한다.
dart format .
또는 VS Code에서 Shift + Alt + F 를 사용하여 코드 정렬 가능.
코드 스타일 자동 검사 (flutter analyze)
코드 스타일을 자동으로 검사하고, 문제를 발견했을 때 경고 또는 오류를 표시한다.
flutter analyze
이 도구를 CI/CD에 적용하여 코드 스타일을 자동 검증할 수도 있다.
1.2. 네이밍 컨벤션
변수 & 함수 네이밍 (Camel Case)
- 변수 및 함수는 lowerCamelCase를 사용한다.
int userCount = 0;
String getUserName() { ... }
클래스 & Enum 네이밍 (Upper Camel Case)
- 클래스, Enum, typedef는 UpperCamelCase를 사용한다.
class UserProfile { ... }
enum UserRole { admin, user, guest }
상수는 UPPER_CASE 사용
- 상수 값은 대문자 + 언더스코어(SCREAMING_SNAKE_CASE)를 사용한다.
const double MAX_WIDTH = 1200.0;
프라이빗 변수는 _ (언더스코어)로 시작
- 라이브러리 내부에서만 사용할 변수는 _로 시작한다.
class User {
String _privateData = "secret"; // 외부에서 접근 불가
}
2. 코드 구조 & 패턴
2.1. 파일 및 폴더 구조
Flutter 프로젝트에서 모듈화된 파일 구조를 유지해야 한다.
lib/
├── main.dart # 앱 엔트리 포인트
├── screens/ # 각 화면별 UI 코드
│ ├── home_screen.dart
│ ├── profile_screen.dart
│ └── settings_screen.dart
├── widgets/ # 재사용 가능한 UI 컴포넌트
│ ├── custom_button.dart
│ ├── user_card.dart
│ └── app_bar.dart
├── models/ # 데이터 모델 클래스
│ ├── user.dart
│ ├── product.dart
│ └── order.dart
├── services/ # API 및 데이터 처리 로직
│ ├── auth_service.dart
│ ├── database_service.dart
│ └── api_service.dart
├── providers/ # 상태 관리 파일 (Provider, Riverpod, Bloc 등)
│ ├── user_provider.dart
│ ├── settings_provider.dart
│ └── auth_provider.dart
├── utils/ # 공통 유틸리티 함수
│ ├── constants.dart
│ ├── helpers.dart
│ └── theme.dart
2.2. 코드 모듈화 및 SRP (단일 책임 원칙)
- 하나의 파일에는 한 가지 역할만 수행하는 코드를 작성한다.
- View(UI) / Logic / Model을 분리하여 유지보수성을 높인다.
// models/user.dart
class User {
final String id;
final String name;
User({required this.id, required this.name});
}
// services/user_service.dart
class UserService {
Future<User> fetchUserData(String userId) async { ... }
}
// providers/user_provider.dart
class UserProvider extends ChangeNotifier {
User? _user;
void setUser(User user) {
_user = user;
notifyListeners();
}
}
// screens/profile_screen.dart
class ProfileScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("Profile")),
body: Center(child: Text("User Profile")),
);
}
}
3. 상태 관리 규칙
Flutter 프로젝트에서는 상태 관리를 일관되게 사용해야 한다.
팀에서 사용할 상태 관리 방법을 사전에 정의하고, 일관되게 적용한다.
3.1. Provider 패턴 사용 예시
class CounterProvider with ChangeNotifier {
int _count = 0;
int get count => _count;
void increment() {
_count++;
notifyListeners();
}
}
Consumer<CounterProvider>(
builder: (context, provider, child) {
return Text(provider.count.toString());
}
);
4. 비동기 프로그래밍 규칙
4.1. Future, async/await 사용 원칙
- async 함수 내에서 await를 사용할 때, try-catch로 예외 처리를 반드시 수행해야 한다.
Future<void> fetchData() async {
try {
var data = await fetchFromAPI();
print(data);
} catch (e) {
print("Error fetching data: $e");
}
}
5. 코드 리뷰 & 협업 규칙
5.1. Git 브랜치 네이밍 규칙
- feature/기능명
- fix/버그명
- hotfix/긴급패치명
- refactor/리팩토링명
예시:
git checkout -b feature/login-screen
git checkout -b fix/user-profile-bug
5.2. PR (Pull Request) & 코드 리뷰 원칙
- 모든 변경 사항은 PR을 통해 진행하고, 코드 리뷰 후 병합
- PR 제목 예시:
[Feature] 로그인 화면 구현
- PR 설명:
- 로그인 UI 추가 - Provider로 상태 관리 적용 - API 연동 후 상태 업데이트
728x90
'Flutter for Beginners' 카테고리의 다른 글
Dart 비동기 프로그래밍 (0) | 2025.02.28 |
---|---|
Dart: Generics, Static, Cascade Operator (0) | 2025.02.25 |
Dart 믹스인 (Mixin) (0) | 2025.02.25 |
Dart 객체지향 프로그래밍 - 상속(Inheritance) (0) | 2025.02.24 |
Dart 객체지향 프로그래밍 - 클래스와 객체 (0) | 2025.02.24 |
Comments