Dart의 핵심 라이브러리
Dart의 핵심 라이브러리 (Core libraries)
Dart의 핵심 라이브러리와 API가 무엇을 제공하는지 알아볼게요. 매일 마주치는 프로그래밍 문제를 풀 때 필요한 필수 기능들이 어디에 있는지 한눈에 정리해 드릴게요.
본문
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을 사용하세요. |