IT기술/플러터 (flutter)

Flutter 패키지 & 플러그인 개발 완벽 가이드: 코드 재사용성 극대화하기

후스파 2025. 7. 17. 07:49
반응형

플러터(Flutter) 생태계에서 패키지와 플러그인은 코드 재사용성과 생산성을 극대화하는 핵심 도구입니다. 패키지는 순수 Dart 코드로 작성된 라이브러리, 플러그인은 Dart와 네이티브(Android/iOS 등) 코드를 모두 포함해 플랫폼 고유 기능을 확장할 수 있습니다.
아래에서 패키지/플러그인 개발부터 테스트, 배포까지 실전 절차를 단계별로 정리합니다.


패키지 vs 플러그인: 차이점

패키지(Package)

  • Dart 코드만 포함
  • 모든 플랫폼에서 동작
  • : 날짜 계산, 문자열 처리 등

플러그인(Plugin)

  • Dart + 네이티브(Android, iOS, Web 등) 코드 포함
  • 플랫폼별 기능 연동(센서, 카메라, 파일 등)
  • Method Channel 활용

패키지 개발 절차

패키지 프로젝트 생성

flutter create --template=package my_package
  • lib/ 폴더에 Dart 코드 작성
  • pubspec.yaml에 의존성, 메타데이터 입력

코드 작성 및 내보내기

주요 기능을 lib/my_package.dart에 구현, 여러 파일을 만들었다면 export로 통합 관리

library my_package;
export 'src/feature1.dart';
export 'src/feature2.dart';

테스트 코드 작성

test/ 폴더에 단위 테스트 작성

import 'package:flutter_test/flutter_test.dart';
import 'package:my_package/my_package.dart';

void main() {
  test('기본 기능 테스트', () {
    expect(MyClass().value, 42);
  });
}

예제(example) 앱 추가

flutter create example
  • example/lib/main.dart에서 패키지 사용법 샘플 구현
  • example/pubspec.yaml에 본인 패키지 의존성 추가

플러그인 개발 절차

플러그인 프로젝트 생성

flutter create --org com.example --template=plugin --platforms=android,ios my_plugin

필요시 -a kotlin(Android), -i swift(iOS) 등 언어 지정 가능

Dart API 정의

lib/my_plugin.dart에 MethodChannel로 API 정의

import 'package:flutter/services.dart';

class MyPlugin {
  static const _channel = MethodChannel('my_plugin');
  static Future getPlatformVersion() async {
    return await _channel.invokeMethod('getPlatformVersion');
  }
}

네이티브 코드 구현

  • Android(Kotlin/Java): android/src/main/.../MyPlugin.kt
    • MethodChannel 핸들러에서 네이티브 기능 구현
  • iOS(Swift/Obj-C): ios/Classes/MyPlugin.swift
    • FlutterMethodChannel로 메서드 처리
  • Web, macOS, Windows 등: 각 플랫폼별 구현 파일에서 연동

예제(example) 앱으로 테스트

example 폴더에서 실제 앱처럼 플러그인 연동 테스트


문서화 및 배포 준비

필수 문서 작성

  • README.md: 설치법, 사용법, 예제, 지원 플랫폼 등 상세히 작성
  • CHANGELOG.md: 버전별 변경 내역 기록
  • LICENSE: MIT, Apache 등 오픈소스 라이선스 명시

pubspec.yaml

  • name, description, version, homepage, repository 등 필수 정보 입력
  • publish_to: 'https://pub.dev'로 설정

배포 및 관리

사전 점검

flutter pub publish --dry-run

에러, 경고 없는지 확인

실제 배포

flutter pub publish

pub.dev 계정 인증 후 배포 완료

버전 관리

기능 추가/수정 시 version 및 CHANGELOG.md 업데이트 후 재배포


베스트 프랙티스 & 팁

개발 핵심 포인트

  • example 앱은 필수: 실제 사용 예시 제공
  • 테스트 코드: 단위/위젯/통합 테스트로 신뢰성 확보
  • 문서화: pub.dev에서 바로 보이므로 명확하고 친절하게
  • 다국어 지원, null safety, 플랫폼별 예외 처리 등 최신 트렌드 반영
  • 플러그인 개발 시 플랫폼 채널(MethodChannel) 네이밍 일관성 유지

고급 개발 팁

# pubspec.yaml 예시
name: my_awesome_package
description: A powerful Flutter package for awesome functionality
version: 1.0.0
homepage: https://github.com/username/my_awesome_package
repository: https://github.com/username/my_awesome_package
issue_tracker: https://github.com/username/my_awesome_package/issues

environment:
  sdk: '>=3.0.0 =3.10.0"

dependencies:
  flutter:
    sdk: flutter

dev_dependencies:
  flutter_test:
    sdk: flutter
  flutter_lints: ^3.0.0

마무리

플러터 패키지와 플러그인 개발은 코드 재사용성, 커뮤니티 기여, 개발 생산성을 모두 높일 수 있는 최고의 방법입니다.
공식 문서와 예제, 테스트, 배포 절차를 잘 따라 패키지/플러그인을 만들어보길 추천합니다. 개발자 커뮤니티에 기여하면서 동시에 자신의 개발 실력도 크게 향상시킬 수 있는 좋은 기회가 될 것입니다.

반응형