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를 켜놓으면 파일 저장할 때마다 자동으로 코드가 생성된다. 개발할 때 편하다.

관련 문서