플러터(Flutter)로 앱을 개발하다 보면 기능과 역할에 따라 파일을 분리하게 됩니다. 프로젝트 규모가 커질수록 models
, services
, widgets
등 수많은 파일이 생겨나죠. 이때 특정 기능을 사용하기 위해 여러 파일을 import
해야 하는 번거로움이 발생합니다.
이 글에서는 여러 Dart 파일을 하나의 논리적인 단위, 즉 라이브러리로 묶어 효율적으로 관리하는 두 가지 방법을 소개합니다.
🤔 왜 라이브러리로 묶어야 할까?
예를 들어 a.dart
와 b.dart
파일이 있고, main.dart
에서 두 파일의 변수를 모두 사용해야 한다고 가정해 봅시다.
a.dart
String a = 'Data-a';
b.dart
String b = 'Data-b';
main.dart
import 'a.dart';
import 'b.dart';
void main() {
print('$a, $b');
}
지금은 단 2개라 괜찮지만, 프로젝트가 확장되어 수십 개의 파일을 import
해야 한다면 어떨까요? 코드가 지저분해지고 유지보수가 어려워집니다. 이 문제를 해결하기 위해 Dart에서는 여러 파일을 하나처럼 가져올 수 있는 방법을 제공합니다.
1. part 와 part of 지시어 사용하기 (고전적인 방법)
이 방법은 여러 파일을 하나의 라이브러리 파일에 종속시켜, 마치 하나의 파일인 것처럼 동작하게 만듭니다.
part of '파일이름.dart';
: 현재 파일이 명시된 라이브러리 파일의 **’일부(part)’**임을 선언합니다.library 라이브러리이름;
: 현재 파일이 **’라이브러리’**의 본체임을 선언합니다.part '파일이름.dart';
: 라이브러리에 포함될 ‘부분(part)’ 파일들을 지정합니다.
[적용 예시]
a.dart
Dart
// 나는 'example_library.dart'의 일부야!
part of 'example_library.dart';
String a = 'Data-a';
b.dart
Dart
// 나도 'example_library.dart'의 일부야!
part of 'example_library.dart';
String b = 'Data-b';
example_library.dart
(라이브러리 본체)
Dart
// 이 파일은 라이브러리이고, 이름은 'example_library'야.
library example_library;
// 이 라이브러리는 a.dart와 b.dart를 포함해.
part 'a.dart';
part 'b.dart';
main.dart
(사용)
Dart
// 라이브러리 파일 하나만 import하면 끝!
import 'example_library.dart';
void main() {
print('$a, $b'); // a와 b 변수 모두 접근 가능
}
part of
로 묶인 파일들은 서로의 private 멤버(_
로 시작하는 변수나 함수)에도 접근할 수 있다는 특징이 있습니다.
2. export 지시어 사용하기 (현대적이고 권장되는 방법)
export
는 특정 파일에서 import
한 클래스, 함수 등을 외부로 다시 내보내는 역할을 합니다. 이를 이용해 여러 파일의 내용을 한 파일(일명 ‘배럴 파일(Barrel File)’)에서 모아 제공할 수 있습니다. 현재는 part
방식보다 구조적으로 더 유연하고 명확하여 널리 사용됩니다.
[적용 예시]
이번에는 part of
선언 없이 각 파일을 독립적으로 만듭니다.
a.dart
String a = 'Data-a';
b.dart
String b = 'Data-b';
example_exporter.dart
(배럴 파일)
// a.dart와 b.dart의 내용을 외부에 내보낸다.
export 'a.dart';
export 'b.dart';
main.dart
(사용)
// 배럴 파일 하나만 import하면 끝!
import 'example_exporter.dart';
void main() {
print('$a, $b');
}
export
방식은 각 파일의 독립성을 유지하면서 필요한 요소만 외부에 노출시키므로, 코드의 캡슐화를 지키는 데 더 유리합니다.
결론: part vs export
구분 | part / part of | export |
개념 | 여러 파일을 하나의 논리적 단위로 합침 | 여러 파일의 요소를 한 파일에서 재노출 |
특징 | part 끼리 private 멤버 접근 가능 | 각 파일이 독립적, private 멤버 접근 불가 |
용도 | 코드를 분할하지만 강하게 결합해야 할 때 | 관련된 기능들을 묶어 간편하게 제공할 때 |
권장 | 제한적 사용 | 대부분의 상황에서 권장 👍 |
프로젝트의 코드를 체계적으로 관리하고 싶다면, 기능별로 배럴 파일을 만들어 export
를 활용하는 습관을 들이는 것이 좋습니다.
참고
https://heavenly.tistory.com/entry/플러터Flutter-라이브러리-만드는-방법
#Flutter
#Dart
#플러터
#다트
#라이브러리
#모듈화
#코드정리
#import
#export
#part
#BarrelFile
#플러터개발
#Dart문법
“We should be better for our children.” 👍