본문으로 바로가기
728x90
반응형
SMALL

Flutter 프로젝트가 점점 커지다 보면 main.dart나 주요 위젯 파일에 import 문이 길어지고 복잡해져서 가독성이 떨어지곤 합니다. 이 문제를 해결하기 위한 방법 중 하나가 바로 Barrel 파일 패턴입니다.

 

Barrel 파일이란?

Barrel 파일이란 여러 파일을 하나로 묶어서 한 번에 import할 수 있게 해주는 Dart 파일입니다. 일종의 "통합 export 파일"로, 관련 있는 클래스, 함수, 위젯들을 모아서 관리할 수 있습니다.

 

예를 들어 여러 provider 파일이 있는 경우:

lib/
└── controllers/
    ├── provider_a.dart
    ├── provider_b.dart
    ├── provider_c.dart

 

 

이렇게 각각을 매번 import 하기보다 하나의 barrel 파일(controllers.dart)을 만들어서 다음처럼 구성합니다:

// lib/controllers/controllers.dart
export 'provider_a.dart';
export 'provider_b.dart';
export 'provider_c.dart';

 

이제 사용하고 싶은 곳에서는 다음 한 줄로 모두 import할 수 있습니다:

import 'package:your_app/controllers/controllers.dart';

 

장점

  • 가독성 향상: import 문이 짧고 간결해짐
  • 관리 편의성: 파일 구조를 쉽게 파악할 수 있음
  • 리팩토링 효율: 나중에 파일명이 바뀌거나 구조가 변경돼도 barrel 파일만 수정하면 됨

 

자주 사용하는 barrel 파일 예시

아래는 보통 barrel 파일을 사용하는 위치들입니다:

폴더barrel 파일 이름목적
controllers/ controllers.dart Provider, controller 관리
models/ models.dart 데이터 모델 관리
widget/ widgets.dart 재사용 위젯 관리
views/screens/ screens.dart 주요 페이지 화면 관리
dialogs/ dialogs.dart 팝업 다이얼로그 모음

 

실제 예시 디렉토리 구조

lib/
├── controllers/
│   ├── provider_a.dart
│   ├── provider_b.dart
│   ├── provider_c.dart
│   └── controllers.dart     # barrel file
├── models/
│   ├── model_a.dart
│   ├── model_b.dart
│   └── models.dart          # barrel file
├── widget/
│   ├── custom_button.dart
│   ├── height_spacer.dart
│   └── widgets.dart         # barrel file

 

 

import할 때 성능에 영향은 없을까?

바로 결론부터 말하자면 불필요한 리소스 낭비는 없습니다.

Dart와 Flutter는 **사용하지 않는 클래스나 함수는 트리 쉐이킹(tree shaking)**을 통해 빌드할 때 제거합니다. 따라서 barrel.dart 파일에서 여러 파일을 export한다고 해도 실제 사용하지 않으면 포함되지 않으므로 성능상 문제는 없습니다.

즉, 하나만 쓰더라도 barrel 파일을 통해 import하는 것이 깔끔하고 안전합니다.

 

마무리

Barrel 파일 패턴은 중대형 Flutter 프로젝트에서 import 구조를 정돈하고 유지보수를 쉽게 해주는 아주 강력한 패턴입니다. 특히 협업 프로젝트나 리팩토링이 많은 프로젝트에서 큰 도움이 됩니다.

728x90
반응형
LIST