Dart와 Flutter를 사용하다 보면, 반복적인 코드를 자동으로 생성하거나, 데이터 모델을 자동으로 변환하는 등의 작업이 필요할 때가 있습니다.
이때 코드 생성 도구와 빌드 러너(Build Runner)가 큰 도움이 됩니다.
이번 글에서는 코드 생성이 무엇인지, 빌드 러너가 어떤 역할을 하는지, 그리고 어떻게 사용하는지에 대해 초보자도 이해하기 쉽게 설명하겠습니다.
1. 코드 생성이란?
코드 생성은 개발자가 작성해야 하는 코드를 자동으로 만들어주는 기술입니다.
예를 들어, 데이터 모델 클래스를 정의하고 이 클래스를 JSON으로 변환하는 메서드나, 데이터를 비교하는 메서드를 반복적으로 작성해야 할 때, 코드 생성을 통해 이러한 작업을 자동화할 수 있습니다.
1.1 코드 생성의 장점
- 시간 절약: 반복적이고 지루한 코드를 자동으로 생성해줍니다.
- 오류 감소: 사람이 직접 작성하는 코드를 줄임으로써 실수할 가능성을 낮춥니다.
- 일관성 유지: 코드 스타일과 형식을 일관되게 유지할 수 있습니다.
2. 빌드 러너(Build Runner)란?
빌드 러너(Build Runner)는 Dart에서 코드 생성을 관리하고 실행하는 도구입니다.
코드 생성기를 실행해 필요한 코드를 자동으로 생성하고, 프로젝트에 반영해주는 역할을 합니다.
2.1 빌드 러너의 역할
- 코드 생성: 필요한 코드 생성기를 실행해 자동으로 코드를 만들어줍니다.
- 자동화: 빌드 프로세스를 자동화해 개발자가 신경 쓸 부분을 줄여줍니다.
- 다양한 플러그인 지원: JSON 직렬화, Freezed, Moor(Drift) 등 다양한 코드 생성 플러그인과 함께 사용할 수 있습니다.
3. 코드 생성과 빌드 러너 사용법
이제 실제로 코드 생성과 빌드 러너를 사용하는 방법을 살펴보겠습니다. 여기서는 JSON 데이터를 Dart 객체로 변환하는 코드 생성을 예로 들어 설명하겠습니다.
3.1 의존성 추가
먼저, pubspec.yaml 파일에 필요한 패키지들을 추가해야 합니다.
여기서는 json_serializable 패키지와 build_runner 패키지를 사용할 것입니다.
dependencies:
json_annotation: ^4.6.0
dev_dependencies:
build_runner: ^2.1.0
json_serializable: ^6.0.1
- json_annotation: 어노테이션을 사용해 JSON 직렬화 코드 생성을 위한 패키지입니다.
- build_runner: 코드 생성기를 실행하고 관리하는 도구입니다.
- json_serializable: JSON 직렬화 코드를 자동으로 생성해주는 패키지입니다.
3.2 데이터 모델 생성
이제 데이터를 표현할 클래스를 정의해보겠습니다. 예를 들어, 사용자를 표현하는 User 클래스를 만들어보겠습니다.
import 'package:json_annotation/json_annotation.dart';
part 'user.g.dart';
@JsonSerializable()
class User {
final String name;
final int age;
User({required this.name, required this.age});
factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);
Map<String, dynamic> toJson() => _$UserToJson(this);
}
- @JsonSerializable(): 이 어노테이션을 통해 User 클래스가 JSON으로 변환될 수 있음을 표시합니다.
- part 'user.g.dart';: user.g.dart 파일을 생성하고 이 파일에서 자동 생성된 코드를 사용합니다.
- fromJson/toJson: JSON과 Dart 객체 간의 변환 메서드입니다.
3.3 코드 생성 실행
코드 생성을 실행하려면 터미널에서 다음 명령어를 입력합니다.
flutter pub run build_runner build
이 명령어를 실행하면 user.g.dart 파일이 생성되고, 이 파일에는 JSON 직렬화에 필요한 코드가 자동으로 생성됩니다.
3.4 생성된 코드 사용하기
이제 생성된 코드를 사용해 JSON 데이터를 User 객체로 변환해보겠습니다.
void main() {
Map<String, dynamic> json = {'name': 'Alice', 'age': 25};
// JSON을 User 객체로 변환
User user = User.fromJson(json);
print('Name: ${user.name}, Age: ${user.age}');
// User 객체를 JSON으로 변환
Map<String, dynamic> newJson = user.toJson();
print(newJson);
}
- User.fromJson(json)을 통해 JSON 데이터를 User 객체로 변환할 수 있습니다.
- user.toJson()을 통해 User 객체를 JSON으로 다시 변환할 수 있습니다.
4. 빌드 러너 사용 시 주의사항
빌드 러너를 사용할 때는 몇 가지 주의할 점이 있습니다:
- 빌드 시간: 프로젝트가 커지면 코드 생성 시간이 오래 걸릴 수 있습니다.
- 자동화 주기: 코드 변경 시마다 빌드 러너를 실행해야 하므로, 이를 자동화할 수 있는 스크립트를 작성하면 편리합니다.
- 충돌 방지: 때때로 다른 패키지와의 충돌이 발생할 수 있습니다. 이 경우, 패키지 버전을 조정하거나 해결 방법을 찾아야 합니다.
Dart에서의 코드 생성과 빌드 러너(Build Runner)는 개발 생산성을 크게 향상시킬 수 있는 도구입니다.
반복적이고 지루한 작업을 자동화하여 더 중요한 코드 작성에 집중할 수 있게 해줍니다.
이 글을 통해 코드 생성의 개념과 빌드 러너의 사용법을 이해하고, 실제 프로젝트에 적용해보세요!
구독!! 공감과 댓글은 저에게 큰 힘이 됩니다.
Starting Google Play App Distribution! "Tester Share" for Recruiting 20 Testers for a Closed Test.
'Dart > Dart Programming language' 카테고리의 다른 글
[고급] Dart 메모리 관리 및 최적화: 메모리 누수 방지 기법 (1) | 2024.09.09 |
---|---|
[고급] Dart 메모리 관리 및 최적화/가비지 컬렉션(Garbage Collection) 이해하기 (0) | 2024.09.09 |
[고급] Dart 메타프로그래밍/ 어노테이션(Annotations) 사용법 (0) | 2024.09.08 |
[고급] Dart 메타프로그래밍/ 리플렉션(Reflection) 기초 (1) | 2024.09.08 |
[고급] Dart제네릭 프로그래밍/ 제네릭의 한계와 제약 조건 (0) | 2024.09.08 |