나만의 라이브러리 만들기
🦥 첫 라이브러리
갑자기 이전 포스팅 만들다가 (=플랫폼마다 UI 다르게 보여주기) 참조를 어떻게 할까? 고민을 했다.
내가 한 20개 정도를 만들건데(나중엔 더 추가하고 수정할 예정) 어디서 주워 들은 지식들이 나의 상상력을 풍부하게 만들었다.
part , part of
참고로 freezed 생성시에 많이 선언해서 사용해봤다. 예시를 작성해야겠다.
📂 main.dart
library my_library; // 라이브러리 선언
part 'file1.dart';
part 'file2.dart';
📂 file1.dart
part of my_library;
void functionA() {
print("Function A 실행");
}
📂 file2.dart
part of my_library;
void functionB() {
print("Function B 실행");
}
기본 동작
- main.dart 에 포함된 part 파일들은 하나의 단일 파일처럼 동작함.
- file1.dart 와 file2.dart 안의 함수 및 클래스를 서로 참조 가능함.
단점 1️. 파일이 많아지면 의존성 관리가 어려움 part 파일끼리 서로 참조할 수 있기 때문에 파일 간의 의존성이 꼬일 가능성이 높음. 하나의 part를 수정하면 다른 여러 개의 part도 영향을 받을 수 있음.
2️. 파일 로딩 문제 part 파일들은 별도의 개별 라이브러리처럼 로드되지 않음. main.dart가 로드될 때, 모든 part 파일들이 한 번에 로드됨. 즉, 불필요한 코드도 한꺼번에 메모리에 올라갈 수 있음 (성능 저하 가능).
3️. import보다 part가 더 제한적임 import는 모듈화가 가능하지만, part는 특정 라이브러리 내부에서만 사용 가능. 즉, 재사용이 어렵고, 유지보수가 불편해짐.
export, import 사용
📂 my_library.dart
export 'file1.dart';
export 'file2.dart';
📂 file1.dart
void functionA() {
print("Function A 실행");
}
📂 file2.dart
void functionB() {
print("Function B 실행");
}
📂 main.dart
import my_library.dart;
void main() {
functionA();
functionB();
}
part는 정말 하나의 파일처럼 동작해서, 모든 part 파일이 한 번에 메모리에 올라감 → 성능 저하 가능성 있음.
서두가 길었지만, 어차피 하나씩 늘려갈거! 나만의 라이브러리를 만들어서 내 프로젝트에서 적용하는 방식으로 갈 것이다.
나는 fvm 을 사용해서 로컬 패키지가 아니라 깃허브에 배포해서 만드는 패키지를 만들겠다.
1. 깃허브 레포지토리 만들기
나는 누구와 공유할 생각이 없어서 Private Repo
로 생성할거다. 만약 누구랑 공유 할거면 그때서야 Public 으로 변경 or ssh key 를 추가해주는 방식으로 진행하면 된다.
2. 첫번째 라이브러리 프로젝트 만들기
flutter create --template=package platform_widgets
platform_widgets
폴더안에 lib/ 자동 생성src/
생성해서 그 안에 추가할 함수 및 클래스 추가
platform_widgets/
├── lib/
│ ├── platform_widgets.dart <-- 이 파일에서 export 관리
│ ├── src/ <-- 개별 위젯 파일 저장 폴더
│ │ ├── bottom_navigation_bar.dart
│ │ ├── adaptive_scroll_physics.dart
│ │ ├── ... (여러 위젯 파일)
├── pubspec.yaml <-- 패키지 정보 관리
├── README.md
├── test/
3. pubspec.yaml 설정
platform_widgets/pubspec.yaml
name: platform_widgets
description: "플러터 플랫폼 별 UI (iOS & Android)"
version: 0.0.1 // 버전
homepage: https://github.com/sht3756/platform_widgets.git // ssh 로 만들었으니, 추가할 레포지토리의 ssh 주소
environment:
sdk: ^3.6.1 // 맞는 버전 추가
flutter: ">=1.17.0" // 맞는 버전 추가
dependencies:
flutter:
sdk: flutter
dev_dependencies:
flutter_test:
sdk: flutter
flutter_lints: ^5.0.0
// 만약 필요한 패키지 있으면 추가
flutter:
uses-material-design: true
4. 깃허브에 배포!
이제 내가 만든 패키지를 추가해주도록 하자!
git init
git add .
git commit -m "init"
git branch -M main
git remote add origin git@github.com:sht3756/platform_widgets.git
git push -u origin main
이제 깃허브에 새로 추가한 platform_widgets
이 올라갔다.
5. 적용!
배포한 패키지를 내가 사용할 곳에 import 해주자
pubspec.yaml
dependencies:
flutter:
sdk: flutter
platform_widgets:
git:
url: git@github.com:sht3756/platform_widgets.git
ref: main
flutter pub get
완료
import 'package:platform_widgets/platform_widgets.dart';
잘 적용된 모습!
Leave a comment