Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
05-16 04:51
관리 메뉴

nomad-programmer

[Programming/Dart] Collection 본문

Programming/Dart

[Programming/Dart] Collection

scii 2020. 10. 6. 17:45

다트는 List, Map, Set 등의 컬렉션을 제공한다. 

다트에서 컬렉션은 기본 제공하는 자료 구조를 말한다.
  • List : 같은 타입으 ㅣ자료를 여러 개 담을 수 있고 특정 인덱스로 접근할 수 있다.
  • Map : 키(key)와 값(value)의 쌍으로 저장할 수 있고 키를 통해 값을 얻을 수 있다.
  • Set : 중복이 허용되지 않고, 찾는 값이 있는지 없는지 판단하고자 할 때 사용한다.

List

List는 순서가 있는 자료를 담는 컬렉션이다. 다른 언어에서는 대부분 배열과 리스트가 별도로 제공되지만, 다트는 배열을 제공하지 않는다.

List<int> numbers = [1, 2, 3, 4, 5];

var numbers = [1, 2, 3, 4, 5];

<int> 는 리스트에 담길 데이터 타입을 지정한 것이다. 하지만 컬렉션도 타입 추론을 사용할 수 있어 일반적으로 var로 선언한다.

dynamic

모든 타입을 대변하는 dynamic이라는 특수한 타입이 있다. 여러 타입을 한 리스트에 넣거나 일반 변수를 선언할 때도 사용할 수 있다. 이때도 명시적으로 List<dynamic>을 쓰는 대신 var를 사용할 수 있다.
var list = [1, 2, 3, 'hello', 5.5];

List<dynamic> = [1, 2, 3, 'hello', 5.5];

스프레드 연산자 (...)

... 연산자는 컬렉션을 펼쳐주는 연산자로 스프레드(spread) 연산자라고 한다. 다른 컬렉션 안에 컬렉션을 삽입할 때 사용한다.

void main(){
  List<String> items = ['abc', 'def', 'ghi'];

  List<String> items2 = ['haha', ...items, 'hoho'];

  print(items2);
}


/* 결과

[haha, abc, def, ghi, hoho]

*/

다음과 같이 리스트를 Set에 담게 되면 자동으로 중복 제거의 효과도 얻을 수 있다.

void main(){
  // final List<int> items = [1, 2, 2, 3, 3, 4, 5]; 이와 같음
  final items = [1, 2, 2, 3, 3, 4, 5];

  final myNumbers = {...items, 6, 7};

  print(myNumbers);
}


/* 결과

{1, 2, 3, 4, 5, 6, 7}

*/

Map

순서가 없고 탐색이 빠른 자료구조 컬렉션이다. 키(key)와 값(value)의 쌍으로 이루어져 있어 키를 이용하여 값을 빠르게 얻을 수 있다. 만약 요청한 키에 해당하는 값이 없다면 값 없음을 의미하는 null을 반환한다.

void main(){
  // Map<String, String> cityMap = {}; 와 같음
  var cityMap = {
    '한국': '경기도',
    '일본': '도쿄',
    '중국': '북경'
  };

  cityMap['한국'] = '서울';

  print(cityMap.length);
  print(cityMap['한국']);
  print(cityMap['중국']);
  print(cityMap['미국']);

  cityMap['미국'] = '워싱턴';
  print(cityMap['미국']);
}


/* 결과

3
서울
북경
null
워싱턴

*/

Set

집합을 표현하는 자료구조 컬렉션이다. add(), remove() 메소드로 집합을 추가하거나 삭제할 수 있다. contains() 메소드는 찾고자 하는 자료가 집합에 있는지 없는지 불리언 타입으로 반환하기 때문에 집합에 요소가 있는지 검사할 때 사용한다. 리스트와 다르게 중복을 허용하지 않는다.

void main() {
  // Set<String> citySet = { }; 와 같음
  var citySet = {'서울', '수원', '오산', '부산'};

  citySet.add('안양');
  citySet.remove('수원');

  print(citySet.contains('안양'));
  print(citySet.contains('도쿄'));
}

/* 결과

true
false

*/

빈 Set이나 빈 Map을 작성할 때는 문법을 조심해야 한다. 값 없이 그냥 { }만 작성하면 Set이 아닌 Map으로 인식한다.

Set<String> mySet = <String>{};

Map<dynamic, dynamic> mySet2 = {};
Comments