[FLUTTER] 다트 주요 라이브러리 둘러보기 - 1 / A Tour of the Dart Libraries
- 다트 라이브러리의 주요 기능의 사용 방법 및 예시를 볼 예정 입니다.
- TL;DR : 최대한 내용을 요약하여 표현했습니다.
- 좀 더 자세하고 상세한 내용을 보고 싶으시면 위 원문 링크를 참조 바랍니다.
플러터란 ? 구글에서 개발한 크로스 플랫폼 앱 개발 프레임워크이다. 언어는 구글이 개발한 Dart 를 사용한다. 안드로이드, iOS, Web, Desktop 을 지원하며 구글의 차기 OS Fuchsia의 메인개발환경이 된다고 한다.
1. 시작하기
이 둘러보기에서는 모든 다트 플랫폼에 포함 된 다음 라이브러리의 주요 기능을 사용하는 방법을 보여줍니다.
dart:core - 기본 제공, 컬렉션 및 기타 핵심 기능. 이 라이브러리는 모든 Dart 프로그램에 자동으로 임포트됩니다.
dart:async - Future 및 Stream과 같은 클래스를 사용한 비동기 프로그래밍 지원.
dart:math - 수학 상수와 함수, 난수 생성기 등 지원
dart:convert - JSON 및 UTF-8을 비롯한 다양한 데이터 표현간에 변환하기위한 인코더 및 디코더
1.1 기타 관련 페이지 소개
2. 다트 코어 ( dart:core ) - numbers(숫자), collections(집합), strings(문자) 등
dart:core 라이브러리는 작지만 중요한 내장 기능 세트를 제공합니다. 이 라이브러리는 모든 Dart 프로그램에 자동으로 임포트됩니다.
2.1 콘솔(console) 출력
print() 메소드를 사용하여 console에 내용을 출력한다
print(anObject);
print('I drink $tea.');
2.2 Numbers
숫자로 작업하기위한 몇 가지 기본 유틸리티가있는 num, int 및 double 클래스를 정의
- 각 형태(int, double)에 parse를 사용하여 문자를 숫자로 변환가능
assert(int.parse('42') == 42);
assert(int.parse('0x42') == 66);
assert(double.parse('0.50') == 0.5);
- 상위 타입인 num을 통해 작업하면 알아서 타입이 casting 됨
assert(num.parse('42') is int);
assert(num.parse('0x42') is int);
assert(num.parse('0.50') is double);
- 진법(radix(근))을 지정하면 해당 진법으로 파싱 됨
assert(int.parse('42', radix: 16) == 66);
- 기타 toString() 활용
// int 를 string 으로 변환
assert(42.toString() == '42');
// double 을 string 으로 변환
assert(123.456.toString() == '123.456');
// 소숫점 아래 N번째에서 반올림하여 변환 (javascript의 toFixed와 유사)
assert(123.456.toStringAsFixed(2) == '123.46');
// e를 사용한 커다란 수 처리
assert(123.456.toStringAsPrecision(2) == '1.2e+2');
assert(double.parse('1.2e+2') == 120.0);
3. 문자열과 정규식(regular expressions)
- dart는 기본적으로 UTF-16 코드 입니다.
- 정규 표현식 (RegExp 객체)을 사용하여 문자열 내에서 검색하고 문자열 부분을 대체 할 수 있습니다.
3.1 문자열 내부 검색
// 해당 단어를 포함한지 여부
assert('Never odd or even'.contains('odd'));
// 해당 단어로 시작하는지 여부
assert('Never odd or even'.startsWith('Never'));
// 해당 단어로 끝나는지 여부
assert('Never odd or even'.endsWith('even'));
// 해당 단어의 시작 위치를 반환, 못찾으면 -1
assert('Never odd or even'.indexOf('odd') == 6);
3.2 문자열에서 데이터 추출
// 해당 범위 문자열 반환
assert('Never odd or even'.substring(6, 9) == 'odd');
// 해당 문자열 패턴으로 나눈 문자 배열 반환
var parts = 'structured web apps'.split(' ');
assert(parts.length == 3);
assert(parts[0] == 'structured');
// 해당 문자열의 UTF-16 단위의 인덱스 위치의 단위(단어) 반환
assert('Never odd or even'[0] == 'N');
// split() 메소드에 빈 문자열을 넣으면 모든 단어 목록으로 나눠 변환, 반복(iterating)에 유용함
for (var char in 'hello'.split('')) {
print(char);
}
// 해당 문자열의 모든 UTF-16 코드유닛(codeUnits)을 목록으로 변환(toList)
var codeUnitList =
'Never odd or even'.codeUnits.toList();
assert(codeUnitList[0] == 78);
3.3 대문자화, 소문자화
모든 언어에 대하여 적용되지 않음에 유의 : 터키어( Turkish alphabet’s) 같은 경우 올바르게 동작하지 않음
// 대문자로 변환
assert('structured web apps'.toUpperCase() ==
'STRUCTURED WEB APPS');
// 소문자로 변환
assert('STRUCTURED WEB APPS'.toLowerCase() ==
'structured web apps');
3.4 공백제거 및 빈 문자열
// 앞 뒤 공백 제거
assert(' hello '.trim() == 'hello');
// 문자열이 빈문자열인지 여부 확인
assert(''.isEmpty);
// 문자열이 공백문자열만 포함한 경우는 빈문자열이 아님
assert(' '.isNotEmpty);
3.5 문자열 일부 대치
- 문자열은 변경할 수없는 개체이므로 만들 수는 있지만 변경할 수는 없습니다.
- 예를 들어 replaceAll() 메서드는 원래 String 을 변경하지 않고 새 String을 반환합니다.
var greetingTemplate = 'Hello, NAME!';
var greeting =
greetingTemplate.replaceAll(RegExp('NAME'), 'Bob');
// greetingTemplate 바뀌지 않습니다.
assert(greeting != greetingTemplate);
3.6 문자열 만들기
- 프로그래밍 방식으로 문자열을 생성하려면 StringBuffer를 사용할 수 있습니다.
- StringBuffer는 toString ()이 호출 될 때까지 새 String 객체를 생성하지 않습니다.
- writeAll() 메소드에는 분리 기호 (이 경우에는 공백)를 지정할 수있는 선택적인 두 번째 매개 변수가 있습니다.
위 말인 즉슨, 문자열을 + 로 연결 하는 것보단 StringBuffer 를 이용하는 것이 성능이 더 좋음. 짧은 문자열의 경우는 템플릿 문자열을 활용
word : ${word}
var sb = StringBuffer();
sb
..write('Use a StringBuffer for ')
..writeAll(['efficient', 'string', 'creation'], ' ')
..write('.');
var fullString = sb.toString();
assert(fullString ==
'Use a StringBuffer for efficient string creation.');
3.7 정규식 표현
// 하나 또는 하나 이상의 숫자
var numbers = RegExp(r'\d+');
var allCharacters = 'llamas live fifteen to twenty years';
var someDigits = 'llamas live 15 to 20 years';
// contains() 메소드에서 정규식을 파라미터로 사용할 수 있습니다.
assert(!allCharacters.contains(numbers));
assert(someDigits.contains(numbers));
// 매칭되는 모든 항목을 다른 문자로 교체
var exedOut = someDigits.replaceAll(numbers, 'XX');
assert(exedOut == 'llamas live XX to XX years');
var numbers = RegExp(r'\d+');
var someDigits = 'llamas live 15 to 20 years';
// 해당 정규식 표현에서 매칭되는 부분이 있는지 여부 확인
assert(numbers.hasMatch(someDigits));
// 모든 매칭되는 항목 반복
for (var match in numbers.allMatches(someDigits)) {
print(match.group(0)); // 15, then 20
}
3.8 더 알아보기
맺음말
이번 시간에는 코어 라이브러리 중 문자열 관련 라이브러리를 알아 봤습니다. 자바스크립트를 어느정도 해보신 분이라면 손쉽게 넘어 가봄직한 내용인거 같습니다. 중요핵심은 dart는 UTF-16이다 라는 것 정도 겠네요. 그럼 다음시간에 또 봐요 ~
- 이전 시간에 배운 A Tour of the Dart Language 1 2 3 4 는 여유 되시면 반복 학습 부탁 드립니다. 위 내용이 학습된 상태에서 본 내용을 습득해야 이해가 빠른편인지라 :)
읽기 힘든 글 읽어주셔서 (또는 눈팅 이라도) 감사합니다
관련 글 링크
@flutters : 제가 작성한 글 중 fluter 관련 글만 모아서 리스팀 처리
관련글(영문)
연재글
- [FLUTTER] DART 언어 기초과정 - 4 / A Tour of the Dart Language
- [FLUTTER] DART 언어 기초과정 - 3 / A Tour of the Dart Language
- [FLUTTER] DART 언어 기초과정 - 2 / A Tour of the Dart Language
- [FLUTTER] DART 언어 기초과정 - 1 / A Tour of the Dart Language