본문 바로가기
Dart (Flutter)

[Dart] Library

by llHoYall 2023. 2. 10.

Dartlibrary는 다른 언어에서는 module, package, crate 등으로 부르는 것입니다.

모듈화와 재사용성을 위해 사용을 합니다.

Identifier를 _로 시작하면 library 내에서만 볼 수 있는 private identifier가 됩니다.

Importing Library

Library를 불러올 때는, URI를 사용하여 import를 할 수 있습니다.

이 때, 특정한 scheme이 제공되는 데, 내장 library의 경우 dart: scheme을 사용하고, pub과 같은 package manager는 package: scheme을 사용합니다.

import 'dart:io';
import 'package:test/test.dart';

Specifying a Library Prefix

Importing 한 여러 library에 중복된 identifier가 있다면, library에 prefix를 붙여 구분할 수 있습니다.

import 'package:lib1/lib1.dart';
import 'package:lib2/lib2.dart' as lib2;

Element element1 = Element();
lib2.Element element2 = lib2.Element();

예시로 lib1, lib2라는 library에 Element라는 identifier가 중복될 경우, 그냥 Element를 선언하면 이게 lib1에 속한 것을 의미하는 지 lib2에 속한 것을 의미하는 지 모호해집니다.

이럴 때, prefix를 붙여 구분을 할 수 있습니다.

Import Only Part of a Library

Library 전체를 importing 하지 않고, 특정한 부분만 importing 하거나, 특정한 부분만 제외하고 importing 할 수 있습니다.

특정 부분만 importing 할 때는 show keyword를 사용하고, 특정 부분만 제외하고 importing 할 때는 hide keyword를 사용합니다.

직관적이라 이해하기 쉽죠?

import 'package:lib1/lib1.dart' show foo;
import 'package:lib2/lib2.dart' hide foo;

Lazily Loading a Library

JS 같은 언어를 사용하셨다면 익숙하실 개념입니다.

Dart에서도 deferred loading 혹은 lazy loading 이라고 부르는데 application에서 필요한 시점에 library를 importing 하는 기능입니다.

Web용으로 compile 그러니까 JS compile 시에만 지원이 됩니다.

deferred as를 사용하여 importing 하고, 사용 시 loadLibrary() method를 호출합니다.

import 'package:greetings/hello.dart' deferred as hello;

Future<void> greet() async {
  await hello.loadLibrary();
  hello.printGreeting();
}

Wrap Up

Dart의 모듈화인 library를 불러와 사용하는 방법에 대해 살펴보았습니다.

기본적으로 프로그래밍을 할 때는 외부의 라이브러리들을 많이 참조하게 되므로, 무조건적으로 사용하게 될 내용이니 반드시 잘 숙지해두세요.

'Dart (Flutter)' 카테고리의 다른 글

[Flutter] How to Deploy a Flutter App to an iPhone  (0) 2023.04.11
[Dart] Metadata  (0) 2023.02.11
[Dart] Generator  (0) 2023.02.10
[Dart] Asynchronous  (0) 2023.02.10
[Dart] Exception Handling  (0) 2023.02.09

댓글