Develop/Flutter

[Dart] 배우기 - 4. 컬렉션

Linitial 2022. 10. 26. 14:59
반응형

 

포스팅 환경

  • Dart 2.18.2

개요

Dart 는 List, Map, Set 등의 Collection 을 제공합니다.

 

이번 포스팅에서는 Dart 에서 기본적인 Collection 을 어떻게 사용하는지 알아보려 합니다.

 

코드를 실행해서 테스트하고 싶은신 분들은 아래 사이트에서

 

실행할 수 있습니다 :)

 

https://dartpad.dev/?

 

DartPad

 

dartpad.dev

 

List

Dart 에서의 List 구조는 여타 다른언어와 마찬가지로

 

같은 타입의 자료를 여러개 담을 수 있고 특정 인덱스로 요소를 접근할 수도 있습니다.

 

List 구조의 생성은 [] 를 통해 아래 코드 처럼 생성할 수 있습니다.

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

 

 

Java, Kotlin 처럼 List<T> 의 형태로 제네릭 타입을 지정하는 것도 가능합니다.

 

하지만 타입 추론이 가능하기 때문에 생략하는것도 가능합니다.

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

 

 

요소를 추가하거나 접근하는 방법은 아래와 같습니다.

void main() {
  var items = [1, 2, 3, 4, 5];

  items[0] = 6;
  items.removeAt(4);
  
  for (var i = 0; i < items.length; i++) {
    print(items[i]);
  }
  
  print("items length: ${items.length}");
}

// 결과
6
2
3
4
items length: 4

 

dynamic type

Dart 의 제네릭 타입에서 모든 타입을 대변할 수 있는 dynamic 이라는 특수한 타입이 있습니다.

 

이 타입을 사용하면 하나의 타입 뿐만 아니라 여러 타입을 담을 수도 있습니다.

List<dynamic> items = [1, "2", 3, true, 5];

 

 

이때도 명시적으로 List<dynamic> 을 쓸수도 있고 var 를 사용하여 생략이 가능합니다.

var items = [1, "2", 3, true, 5];

 

Set

Dart 에서의 Set 자료구조도 다른 언어와 마찬가지로

 

중복을 허용하지 않습니다.

 

Set 구조의 생성은 {} 을 통해 아래 코드 처럼 생성할 수 있습니다.

Set<int> items = {1, 2, 3, 4, 5};

 

 

Set 역시 타입 추론으로 제네릭 명시가 생략 가능합니다.

var items = {1, 2, 3, 4, 5};

 

 

요소를 추가하거나 접근하는 방법은 아래와 같습니다.

void main() {
  Set<int> items = {1, 2, 3, 4, 5};

  items.add(6);
  items.add(3);
  items.remove(4);

  for (var i = 0; i < items.length; i++) {
    print(items.elementAt(i));
  }

  print("items length: ${items.length}");
}

//결과
1
2
3
5
6
items length: 5

 

 

 

Set 을 선언할 때 주의사항이 있습니다.

 

내부에 값을 작성하지 않고 그냥 {} 만 선언하면

 

컴파일러에서 Set 이 아닌 Map 으로 인식합니다.

 

따라서 Set 으로 선언할 경우 타입을 지정하거나 제네릭타입을 넣거나

 

혹은 값을 작성해야 합니다.

// Set 이 아닌 Map<dynamic, dynamic> 으로 컴파일러가 인식
var items = {};

// Set 으로 인식
Set<int> items = {1, 2, 3};

// Set 으로 인식
var items = {1, 2, 3};

// Set 으로 인식
var items = <int>{};

 

Map

Dart 에서의 Map 구조도 다른 언어와 마찬가지로 키와 값의 쌍으로 이루어져 있습니다.

 

만약 찾으려는 키에 해당하는 값이 존재 하지 않는 다면 null 을 반환합니다.

 

Map 구조의 생성은 {} 을 통해 아래 코드 처럼 생성할 수 있습니다.

Map<String, int> items = {
      "A" : 1,
      "B" : 2,
      "C" : 3
}; 

 

 

Map 역시 타입 추론에 의하여 제네릭 타입 명시 생략이 가능합니다.

var items = {
      "A" : 1,
      "B" : 2,
      "C" : 3
}; 

 

 

요소를 추가하거나 접근하는 방법은 아래와 같습니다.

var items = {
  "A" : 1,
  "B" : 2,
  "C" : 3
};

items["D"] = 4;
items.remove("A");

print(items["A"]);

for (var key in items.keys) {
  print("key: $key, value: ${items[key]}");
}

print("items length: ${items.length}");

// 결과
null
key: B, value: 2
key: C, value: 3
key: D, value: 4
items length: 3

 

 

 

여기까지 Dart 에서 사용하는 기본적인 Collection 을 알아보았습니다.

 

이상으로 포스팅을 마치겠습니다.

 

감사합니다 :)

 

 


 

 

https://linitial.tistory.com/52?category=1050635

 

[Dart] 배우기 - 5. 객체지향 프로그래밍

포스팅 환경 M1 Mac OS Monterey 12.6 Dart 2.18.2 개요 Dart 는 실제 세계를 반영한 객체 지향 프로그래밍 언어입니다. 따라서 클래스, 상속, 다형성 등을 이용해 코드를 작성할 수 있습니다. 이번 포스팅에

linitial.tistory.com

 

반응형