Dart의 핵심 라이브러리

Dart의 핵심 라이브러리 (Core libraries)

Dart의 핵심 라이브러리와 API가 무엇을 제공하는지 알아볼게요. 매일 마주치는 프로그래밍 문제를 풀 때 필요한 필수 기능들이 어디에 있는지 한눈에 정리해 드릴게요.

출처: Dart's core libraries

본문

Dart에는 일상적인 프로그래밍 작업을 위한 필수 기능을 담은 풍부한 핵심 라이브러리 세트가 있어요. 객체 컬렉션을 다루는(dart:collection), 계산을 하는(dart:math), 데이터를 인코딩/디코딩하는(dart:convert) 작업 같은 것들이죠. 추가 API는 흔히 쓰는 패키지에서 찾을 수 있어요.

라이브러리 둘러보기 (Library tour)

다음 가이드들은 Dart 핵심 라이브러리의 주요 기능을 어떻게 쓰는지 다룬 자료예요. 어디까지나 개요만 제공할 뿐 완전한 설명은 아니에요. 라이브러리나 그 구성원(member)에 대한 더 자세한 내용이 필요할 때는 Dart API 레퍼런스를 확인하세요.

  • dart:core: 내장 타입, 컬렉션, 그리고 기타 핵심 기능을 제공해요. 이 라이브러리는 모든 Dart 프로그램에 자동으로 import돼요.
  • dart:async: Future, Stream 같은 클래스를 이용한 비동기 프로그래밍을 지원해요.
  • dart:math: 수학 상수와 함수, 그리고 난수 생성기를 제공해요.
  • dart:convert: JSON, UTF-8을 포함해 서로 다른 데이터 표현 간의 변환을 위한 인코더/디코더를 제공해요.
  • dart:io: Flutter 앱, 서버, 커맨드라인 스크립트처럼 Dart VM을 사용할 수 있는 프로그램을 위한 I/O를 제공해요.
  • dart:js_interop: 웹 플랫폼과의 상호 운용(interop)을 위한 API를 제공해요. package:web과 함께 dart:js_interop은 dart:html을 대체해요.

앞서 말했듯이 이 페이지들은 개요일 뿐이에요. 몇몇 dart:* 라이브러리만 다루고 타사 라이브러리는 전혀 다루지 않아요.

Dart가 플랫폼별로 지원하는 모든 라이브러리의 개요를 보려면 아래의 멀티 플랫폼 라이브러리, 네이티브 플랫폼 라이브러리, 웹 플랫폼 라이브러리 목록을 확인하세요.

라이브러리 정보를 찾을 수 있는 또 다른 곳으로는 pub.dev 사이트Dart 웹 개발자 라이브러리 가이드가 있어요. 모든 dart:* 라이브러리의 API 문서는 Dart API 레퍼런스에서, Flutter를 쓴다면 Flutter API 레퍼런스에서 찾을 수 있어요.

Dart 언어 자체에 대해 더 배우고 싶다면 언어 문서와 샘플을 확인해 보세요.

멀티 플랫폼 라이브러리 (Multi-platform libraries)

다음 표는 모든 Dart 플랫폼에서 동작하는 Dart 핵심 라이브러리 목록이에요.

라이브러리 설명
dart:core 모든 Dart 프로그램을 위한 내장 타입, 컬렉션, 그리고 기타 핵심 기능을 제공해요.
dart:async, package:async Future, Stream 같은 클래스를 이용한 비동기 프로그래밍을 지원해요. package:async는 Future와 Stream 타입 주변의 추가 유틸리티를 제공해요.
dart:collection, package:collection dart:core의 컬렉션 지원을 보완하는 클래스와 유틸리티를 제공해요. package:collection은 추가 컬렉션 구현과 컬렉션 작업을 위한 함수를 제공해요.
dart:convert, package:convert JSON, UTF-8을 포함한 다양한 데이터 표현 간 변환을 위한 인코더/디코더를 제공해요. package:convert는 추가 인코더와 디코더를 제공해요.
dart:developer 디버거, 인스펙터 같은 개발자 도구와의 상호 작용을 제공해요. 네이티브 JIT개발용 JavaScript 컴파일러에서만 동작해요.
dart:math 수학 상수와 함수, 그리고 난수 생성기를 제공해요.
dart:typed_data, package:typed_data 고정 크기 데이터(예: 부호 없는 8바이트 정수)와 SIMD 숫자 타입을 효율적으로 다루는 리스트를 제공해요. package:typed_data는 타입이 지정된 데이터를 다루는 추가 클래스와 함수를 제공해요.

네이티브 플랫폼 라이브러리 (Native platform libraries)

다음 표는 Dart 네이티브 플랫폼(AOT 및 JIT 컴파일된 코드)에서 동작하는 Dart 핵심 라이브러리 목록이에요.

라이브러리 설명
dart:ffi, package:ffi Dart 코드가 네이티브 C API를 사용할 수 있게 해 주는 외부 함수 인터페이스(FFI)를 제공해요. package:ffi는 Dart 문자열과 C 문자열 변환 지원 등을 포함한 유틸리티를 제공해요.
dart:io, package:io 웹이 아닌 애플리케이션을 위한 파일, 소켓, HTTP, 기타 I/O 지원을 제공해요. package:io는 ANSI 색상, 파일 복사, 표준 종료 코드 지원 등을 포함한 기능을 제공해요.
dart:isolate 스레드와 비슷한 독립 워커인 isolate를 이용한 동시성 프로그래밍을 지원해요.
dart:mirrors 자체 검사(introspection)와 동적 호출을 지원하는 기본적인 반영(reflection) 기능을 제공해요. 실험적 기능이며 네이티브 JIT 전용입니다(Flutter 아님).

웹 플랫폼 라이브러리 (Web platform libraries)

다음 표는 Dart 웹 플랫폼(JavaScript로 컴파일되는 코드)에서 동작하는 Dart 핵심 라이브러리 목록이에요. 최신 권장 도구는 굵게, 레거시 도구는 기울임꼴로 표시했어요 (자세한 내용은 JavaScript 상호 운용을 참고하세요).

라이브러리 설명
package:web JS interop을 기반으로 만든 가벼운 브라우저 API 바인딩이에요. 모든 dart:* 웹 라이브러리를 대체해요. 마이그레이션 가이드를 읽어 보세요.
dart:js_interop JavaScript와 브라우저 API와의 상호 운용을 제공해요. package:js를 대체해요.
dart:js_interop_unsafe JavaScript 객체를 동적으로 조작하는 유틸리티 메서드를 제공해요. dart:js_util을 대체해요.
dart:html (레거시) 웹 기반 애플리케이션을 위한 HTML 요소와 기타 리소스를 제공해요. package:web을 사용하세요.
dart:indexed_db (레거시) 인덱스 지원이 있는 클라이언트 측 키-값 저장소를 제공해요. package:web을 사용하세요.
dart:js, dart:js_util, package:js (레거시) JS interop을 위한 저수준 원시 기능과 고수준 어노테이션을 제공해요. dart:js_interop 또는 dart:js_interop_unsafe를 사용하세요.
dart:svg (레거시) 확장 가능한 벡터 그래픽(SVG)을 제공해요. package:web을 사용하세요.
dart:web_audio (레거시) 브라우저에서 고품질 오디오 프로그래밍을 지원해요. package:web을 사용하세요.
dart:web_gl (레거시) 브라우저에서 3D 프로그래밍을 지원해요. package:web을 사용하세요.

더 알아보기