[FLUTTER] 다트 주요 라이브러리 둘러보기 - 2 / 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의 메인개발환경이 된다고 한다.

이전 글

4. Collections (컬렉션)

Dart는 목록(list), 세트(set) 및 맵(map) 클래스를 포함하는 핵심 콜렉션 API를 제공합니다.

4.1 Lists(리스트)

list 기초 활용

// list 생성자 사용 
var vegetables = List();

// 문자열을 사용하여 list 생성
var fruits = ['apples', 'oranges'];

// list에 값 추가하기 
fruits.add('kiwis');

// list에 목록 다수의 항목 추가하기 
fruits.addAll(['grapes', 'bananas']);

// list의 길이 가져오기 
assert(fruits.length == 5);

// 리스트 단일항목 삭제 
var appleIndex = fruits.indexOf('apples');
fruits.removeAt(appleIndex);
assert(fruits.length == 4);

// list 의 모든 항목 삭제 
fruits.clear();
assert(fruits.length == 0);

indexOf() 예시

var fruits = ['apples', 'oranges'];

// list의 항목 값에 index 기준으로 접근 
assert(fruits[0] == 'apples');

// list의 항목 위치 찾기 
assert(fruits.indexOf('apples') == 0);

list 의 정렬을 위한 sort() 메소드
sort() 메소드를 통해 값을 정렬 할 수 있습니다. 반환값은 0보다 작거나, 0이거나, 0보다 커야 되며 해당 값을 기준으로 정렬 합니다. 문자열을 비교하는 경우는 compareTo() 메소드를 활용합니다.

var fruits = ['bananas', 'apples', 'oranges'];

// list 정렬 
fruits.sort((a, b) => a.compareTo(b));
assert(fruits[0] == 'apples');

generic 을 사용하는 경우 해당 타입의 값만 포함할 수 있습니다.

// 해당 list 는 string 만 포함해야 된다.
var fruits = List<String>();

fruits.add('apples');
var fruit = fruits[0];
assert(fruit is String);

4.2 Sets (세트)

다트의 set은 순차적이지 않은 고유 항목 모음입니다. 집합은 순서가 지정되지 않으므로 색인(index, 위치)별로 집합의 항목을 가져올 수 없습니다.

var ingredients = Set();
ingredients.addAll(['gold', 'titanium', 'xenon']);
assert(ingredients.length == 3);

// 중복된 항목을 추가해도 해당 세트에는 변화가 없습니다.
ingredients.add('gold');
assert(ingredients.length == 3);

// 세트에서 항목 제거
ingredients.remove('gold');
assert(ingredients.length == 2);

contains(), containsAll() 메소드를 통해 해당 set이 해당 object를 포함히지 여부를 확인합니다.

var ingredients = Set();
ingredients.addAll(['gold', 'titanium', 'xenon']);

// 해당 set 이 해당 item을 포함하는지 점검
assert(ingredients.contains('titanium'));

// 해당 set 이 해당 item 목록을 모두 포함하는지 점검 
assert(ingredients.containsAll(['titanium', 'xenon']));

intersection() 을 통해 두 set간 교집합 정보를 얻을 수 있다.

var ingredients = Set();
ingredients.addAll(['gold', 'titanium', 'xenon']);

// 두 set 의 교집합 정보를 생성
var nobleGases = Set.from(['xenon', 'argon']);
var intersection = ingredients.intersection(nobleGases);
assert(intersection.length == 1);
assert(intersection.contains('xenon'));

4.3 map (맵)

일반적으로 사전(dictionary) 또는 해시(hash)라고 하는 map 은 키(key) - 값(value) 쌍의 순서가 지정되지 않은 모음입니다. map 은 쉽게 검색 할 수 있도록 key 와 value 를 연결합니다.


// map은 문자열을 주로 키값으로 사용합니다.
var hawaiianBeaches = {
  'Oahu': ['Waikiki', 'Kailua', 'Waimanalo'],
  'Big Island': ['Wailea Bay', 'Pololu Beach'],
  'Kauai': ['Hanalei', 'Poipu']
};

// 맵은 생성자로 생성할 수 있습니다.
var searchTerms = Map();

// 맵은 파라미터 타입을 지정하여 특정 key, value 형태로 입력 받을 수 있습니다. 
var nobleGases = Map<int, String>();

중괄호(bracket) [] 을 이용해 값을 설정 및 가져올 수 있으며, remove() 메소드를 통해 값을 제거 할 수 있습니다.

var nobleGases = {54: 'xenon'};

// 해당 키 값에 해당하는 값을 반환한다 
assert(nobleGases[54] == 'xenon');

// 해당 map 이 해당 key 값을 가지고 있는지 점검
assert(nobleGases.containsKey(54));

// 해당 key값과 그것의 value를 제거한다 
nobleGases.remove(54);
assert(!nobleGases.containsKey(54));

map 에서 모든 key값 또는 value값을 가져올 수 있습니다.

var hawaiianBeaches = {
  'Oahu': ['Waikiki', 'Kailua', 'Waimanalo'],
  'Big Island': ['Wailea Bay', 'Pololu Beach'],
  'Kauai': ['Hanalei', 'Poipu']
};

// 해당 collection에 정의된 모든 key 정보를 반환(열거형)
var keys = hawaiianBeaches.keys;

assert(keys.length == 3);
assert(Set.from(keys).contains('Oahu'));

// 해당 collection의 값 목록을 반환(열거형)
var values = hawaiianBeaches.values;
assert(values.length == 3);
assert(values.any((v) => v.contains('Waikiki')));

value가 null 도 있기 때문에 containsKey() 를 통해 key 의 존재여부를 선행 파악 합니다.

var hawaiianBeaches = {
  'Oahu': ['Waikiki', 'Kailua', 'Waimanalo'],
  'Big Island': ['Wailea Bay', 'Pololu Beach'],
  'Kauai': ['Hanalei', 'Poipu']
};

assert(hawaiianBeaches.containsKey('Oahu'));
assert(!hawaiianBeaches.containsKey('Florida'));

putIfAbsent() : 해당 key 가 존재 하지 않으면 대상 함수를 실행 결과를 넣어(put) 줍니다.

var teamAssignments = {};
teamAssignments.putIfAbsent(
    'Catcher', () => pickToughestKid());
assert(teamAssignments['Catcher'] != null);

4.4 Collection 공용 메소드

해당 collection이, 비어 있는지(isEmpty) 아닌지(isNotEmpty) 여부 판별

var coffees = [];
var teas = ['green', 'black', 'chamomile', 'earl grey'];
assert(coffees.isEmpty);
assert(teas.isNotEmpty);

forEach() : 해당 collection 의 item 항목 목록 반복 list, set

var teas = ['green', 'black', 'chamomile', 'earl grey'];

teas.forEach((tea) => print('I drink $tea'));

map 의 경우 key, value를 반환한다

hawaiianBeaches.forEach((k, v) {
  print('I want to visit $k and swim at $v');
});

map() 메소드는 해당 item의 값을 처리 후 item의 결과값을 update 한다.

var teas = ['green', 'black', 'chamomile', 'earl grey'];


// map() 메소드는, 사용자가 반환 된 객체에서 항목을 요청할 때까지 함수가 호출되지 않습니다.
var loudTeas = teas.map((tea) => tea.toUpperCase());
loudTeas.forEach(print);

// 즉시 반영되도록 하고자 하는 경우에는 toList(), toMap() 메소드를 사용하면 됩니다.  
var loudTeas =
    teas.map((tea) => tea.toUpperCase()).toList();

where, any, every

var teas = ['green', 'black', 'chamomile', 'earl grey'];

// 카모마일은 디카페인 입니다.
bool isDecaffeinated(String teaName) =>
    teaName == 'chamomile';

// where() 메소드는 해당 item을 가지고 처리한 결과가 true인 항목을 반환합니다.
// 하단의 단축 사용법을 잘 눈여겨 봅니다.(이런 형태를 자주 씁니다, 파라미터 생략 및 자동 대입)
var decaffeinatedTeas =
    teas.where((tea) => isDecaffeinated(tea));
// or teas.where(isDecaffeinated)

// any() 메소드는 적어도 하나라도 만족시키면 true를 반환한다 
assert(teas.any(isDecaffeinated));

// every() 메소드는 모든 항목이 모두 만족되면 true를 반환합니다.
assert(!teas.every(isDecaffeinated));

맺음말

이번 시간에는 collection 에 대해 알아 봤습니다. javascript의 array가 좀 더 확장된 느낌이랄까요 ? java와 유사점이 많이 있네요 :)

  • 이전 시간에 배운 A Tour of the Dart Language 1 2 3 4 는 여유 되시면 반복 학습 부탁 드립니다. 위 내용이 학습된 상태에서 본 내용을 습득해야 이해가 빠른편인지라 :)

읽기 힘든 글 읽어주셔서 (또는 눈팅 이라도) 감사합니다

관련 글 링크

@flutters : 제가 작성한 글 중 fluter 관련 글만 모아서 리스팀 처리

관련글(영문)

연재글

설치/설정


aaronhong_banner.jpg

Sort:  

흐으음... 제가 보기엔 완벽하네요...!!! 음... 커피도 java가 맛있고... 음...

커피는 아메리카 NO !

여느 랭기나처럼 대부분 비슷하면서 편리해 보이는게 많네요 ㅎ

네 크게 많이 다르진 않은지라 기본적으로 비슷한거 위주로 사용해 보다가 추후 lib document 참조하여 필요할 때마다 보면서 하면 될거 같을거 같네요 :)

Coin Marketplace

STEEM 0.26
TRX 0.11
JST 0.033
BTC 62796.11
ETH 3045.55
USDT 1.00
SBD 3.85