기억을 지배하는 기록

Dart 개발자 가이드 (코딩 스타일 & 협업 가이드) 본문

Flutter for Beginners

Dart 개발자 가이드 (코딩 스타일 & 협업 가이드)

Andrew's Akashic Records 2025. 2. 25. 22:14
728x90

Developers collaborating on Dart programming

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
Comments