Dart, 라이브러리와 가시성 (Libraries and visibility)
글. 수알치 오상문
import 기능은 공유 가능한 모듈 방식 코드를 만드는 데 도움이 될 수 있습니다. 라이브러리는 API를 제공 할뿐만 아니라 정보 보호 단위입니다. 밑줄(_)로 시작하는 식별자는 라이브러리 내부에서만 접근할 수 있습니다. 모든 Dart 앱은 라이브러리 지시문을 사용하지 않더라도 라이브러리로 취급합니다.
패키지(packages)를 아용하여 라이브러리를 배포할 수 있습니다.
라이브러리 이용
import를 이용하여 사용하고 싶은 라이브러리를 지시합니다. 예를 들어, Dart 웹 앱은 일반적으로 다음과 같이 가져올 수있는 dart : html 라이브러리를 사용할 수 있습니다.
import 'dart:html';
import에 사용할 라이브러리를 지정하는 URI를 지시합니다. 내장 라이브러리의 경우 URI에는 dart : 체계를 이용합니다. 다른 라이브러리는 파일 시스템 경로 또는 package : 방식을 이용합니다.
import 'package:test/test.dart';
참고: URI(Uniform Resource Identifier), URL(Uniform Resource Locators)
라이브러리 접두어 표기
충돌하는 식별자가 있는 두 라이브러리를 가져 오는 경우, 하나 또는 두 라이브러리에 접두어를 지정할 수 있습니다. 예를 들어, library1과 library2에 모두 Element 클래스가 있다면 다음처럼 처리할 수 있습니다.
import 'package:lib1/lib1.dart';
import 'package:lib2/lib2.dart' as lib2;
// lib1의 Element 사용
Element element1 = Element();
// lib2의 Element 사용.
lib2.Element element2 = lib2.Element();
라이브러리의 일부만 가져오기
라이브러리 일부만 사용하려는 경우 라이브러리를 선택적으로 가져올 수 있습니다.
// foo만 import
import 'package:lib1/lib1.dart' show foo;
// foo를 제외한 모든 이름을 Import
import 'package:lib2/lib2.dart' hide foo;
라이브러리의 지연 로딩
지연 로드(lazy loading)를 사용하면 라이브러리가 필요한 경우, 웹 앱이 요청시 라이브러리를 로드할 수 있습니다. 이 기능은 Dart 2에서 지원합니다. 지연 로드를 사용하는 몇 가지 경우는 다음과 같습니다.
- 웹 앱의 초기 시작 시간을 줄임
- A/B 테스트 수행 (알고리즘의 대체 구현 시도)
- 옵션 화면이나 대화상자처럼 잘 사용하지 않는 경우.
Flutter, Dart VM 및 dartdevc는 지연로드를 지원하지 않습니다.
라이브러리를 지연 로딩하려면 deferred as를 사용하여야 합니다.
import 'package:greetings/hello.dart' deferred as hello;
라이브러리가 필요한 경우, 라이브러리 식별자를 사용하여 loadLibrary()를 호출합니다.
Future<void> greet() async {
await hello.loadLibrary();
hello.printGreeting();
}
await 키워드는 라이브러리가 로드 될 때까지 실행을 일시 중지합니다. async 및 await에 대한 자세한 내용은 비동기 지원을 참조하세요. 참조: asynchrony support.
라이브러리에서 loadLibrary()를 여러 번 호출할 수 있지만, 라이브러리는 한 번만 로드됩니다.
참조: 라이브러리 구현 Create Library Packages
<이상>
'Dart' 카테고리의 다른 글
Dart, 호출 가능 클래스 (Callable classes) (0) | 2021.06.17 |
---|---|
Dart, 비동기 지원 (Asynchrony) (0) | 2021.06.17 |
Dart, 제너릭(Generic) (0) | 2021.06.17 |
Dart, 클래스 변수와 메서드 (0) | 2021.06.17 |
Dart, 클래스에 기능 추가하기(mixin) (0) | 2021.06.17 |