[FLUTTER] 다트 주요 라이브러리 둘러보기 - 1 / A Tour of the Dart Libraries

in #dart5 years ago

출처 : https://www.dartlang.org/guides/libraries/library-tour

  • 다트 라이브러리의 주요 기능의 사용 방법 및 예시를 볼 예정 입니다.
  • 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 관련 글만 모아서 리스팀 처리

관련글(영문)

연재글

설치/설정


aaronhong_banner.jpg

Coin Marketplace

STEEM 0.31
TRX 0.11
JST 0.035
BTC 66739.07
ETH 3228.97
USDT 1.00
SBD 4.23