annotion
| topics | 500-모바일개발 501 Flutter 503 Dart |
| types | 이론 레퍼런스 |
| tags | #dart #annotation #code-generation |
| references | nx006.tistory.com/69 stackoverflow.com/questions/77277048 |
Annotation과 코드 제너레이션
Dart에서 어노테이션을 활용한 코드 생성 방식에 대한 정리다.
어노테이션이란
메타데이터를 코드에 추가하는 방식이다. @ 기호로 시작한다.
@override
@deprecated
@JsonSerializable()
@riverpod
코드 제너레이션 장단점
장점
- 보일러플레이트 코드 감소
- 타입 안정성 향상
- 실수 방지 (컴파일 타임 체크)
단점
- 빌드 시간 증가
- 생성된 코드 디버깅 어려움
- 학습 곡선
주요 코드 생성 패키지
| 패키지 | 용도 |
|---|---|
json_serializable |
JSON 직렬화 |
freezed |
불변 데이터 클래스 |
riverpod_generator |
Provider 생성 |
retrofit_generator |
API 클라이언트 |
auto_route_generator |
라우팅 |
코드 생성 명령어
# <span id="한번만-빌드"></span>한번만 빌드
dart run build_runner build
# <span id="파일-변경-감지"></span>파일 변경 감지
dart run build_runner watch
# <span id="충돌-해결"></span>충돌 해결
dart run build_runner build --delete-conflicting-outputs
# <span id="캐시-삭제"></span>캐시 삭제
flutter clean
dart run build_runner clean
문제 해결
빌드가 안 될 때
# <span id="1-캐시-삭제"></span>1. 캐시 삭제
flutter clean
dart run build_runner clean
# <span id="2-의존성-재설치"></span>2. 의존성 재설치
flutter pub get
# <span id="3-재빌드"></span>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 어노테이션