반응형

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 

 

<이상>

반응형

+ Recent posts