annotion
| topics |
|
| types | |
| tags |
#dart #annotation #code-generation
|
| references |
Annotation과 코드 제너레이션
Dart에서 어노테이션을 활용한 코드 생성 방식에 대한 정리다.
어노테이션이란
메타데이터를 코드에 추가하는 방식이다. @ 기호로 시작한다.
@override
@deprecated
@JsonSerializable()
@riverpod
코드 제너레이션 장단점
장점
- 보일러플레이트 코드 감소
- 타입 안정성 향상
- 실수 방지 (컴파일 타임 체크)
단점
- 빌드 시간 증가
- 생성된 코드 디버깅 어려움
- 학습 곡선
주요 코드 생성 패키지
| 패키지 | 용도 |
|---|---|
json_serializable |
JSON 직렬화 |
freezed |
불변 데이터 클래스 |
riverpod_generator |
Provider 생성 |
retrofit_generator |
API 클라이언트 |
auto_route_generator |
라우팅 |
코드 생성 명령어
# 한번만 빌드
dart run build_runner build
# 파일 변경 감지
dart run build_runner watch
# 충돌 해결
dart run build_runner build --delete-conflicting-outputs
# 캐시 삭제
flutter clean
dart run build_runner clean
문제 해결
빌드가 안 될 때
# 1. 캐시 삭제
flutter clean
dart run build_runner clean
# 2. 의존성 재설치
flutter pub get
# 3. 재빌드
dart run build_runner build --delete-conflicting-outputs
흔한 오류들
- part 파일 없음:
dart run build_runner build먼저 실행 - 타입 불일치: import 확인, 생성된 파일이 최신인지 확인
- 버전 충돌: pubspec.lock 삭제 후
flutter pub get
팁:
build_runner watch를 켜놓으면 파일 저장할 때마다 자동으로 코드가 생성된다. 개발할 때 편하다.
관련 문서
- freezed,JsonSerialiable - Freezed 사용법
- riverpod annotation - Riverpod 어노테이션