🚀 Flutter/Dart에서 여러 파일을 하나의 라이브러리로 묶어 관리하기

플러터(Flutter)로 앱을 개발하다 보면 기능과 역할에 따라 파일을 분리하게 됩니다. 프로젝트 규모가 커질수록 modelsserviceswidgets 등 수많은 파일이 생겨나죠. 이때 특정 기능을 사용하기 위해 여러 파일을 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 ofexport
개념여러 파일을 하나의 논리적 단위로 합침여러 파일의 요소를 한 파일에서 재노출
특징part끼리 private 멤버 접근 가능각 파일이 독립적, private 멤버 접근 불가
용도코드를 분할하지만 강하게 결합해야 할 때관련된 기능들을 묶어 간편하게 제공할 때
권장제한적 사용대부분의 상황에서 권장 👍

프로젝트의 코드를 체계적으로 관리하고 싶다면, 기능별로 배럴 파일을 만들어 export를 활용하는 습관을 들이는 것이 좋습니다.


참고

https://heavenly.tistory.com/entry/플러터Flutter-라이브러리-만드는-방법

#Flutter #Dart #플러터 #다트 #라이브러리 #모듈화 #코드정리 #import #export #part #BarrelFile #플러터개발 #Dart문법

“We should be better for our children.” 👍

댓글 남기기