Dart

[Dart] List, Set 개념 및 차이점

mjjayce 2025. 3. 11. 20:23

Dart 는 List, Set, Map 이라는 세 가지 Collection을 기본으로 지원한다.

이 중 유사한 개념인 List와 Set의 차이점을 확실히 정리했다.

 

List (배열)

:순서가 있는 값의 묶음

 

 

선언 규칙

 

List<[타입]> [변수 이름] = [요소]; 

List<String> colors = ['red', 'blue', 'green'];

 

[변수 이름] = [요소];

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

 

리스트 타입을 정해주지 않거나 var로 선언해도 된다. 

위 코드의 경우 타입을 int로 추론한다.

 

 

리스트의 타입을 정한 경우, 다른 타입의 요소를 넣으면 오류가 발생한다.

타입을 정하지 않은 경우 모든 요소를 포함하는 상위 클래스로 타입을 추론한다.

 

List<String> colors = ['red', 'blue', 'green', 000];
//The element type 'int' can't be assigned to the list type 'String'

String 타입을 정해주었으므로 int 타입의 000을 넣으면 오류가 발생한다.

 

var numbers = [1, 2, 10, 3.14];
print(numbers.runtimeType);
CONSOLE

List<num>

타입을 정해주지 않았으므로 int와 double타입의 상위 타입인 Numbers로 추론한다.

 

 

 

Set (집합)

: 순서가 없는 중복되지 않은 값의 묶음

 

 

선언 규칙

 

Set<타입> [변수 이름] = {요소};

Set<String> fruits = {'apple', 'orange', 'banana'};

 

변수 이름 = {요소};

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

 

List와 마찬가지로 타입을 정해 줄 수도, 정하지 않을 수도 있다.

타입을 정하지 않은 경우 모든 요소를 포함하는 상위 타입을 자동으로 추론한다.

 

단, Set안에 값을 넣지 않는 경우 타입 지정이 필요하다. 

var names = <String>{}; 
print(names.runtimeType); // Set<String>
var names = {}; 
print(names.runtimeType); // Map<dynamic, dynamic>

 

타입 지정한 경우 Set, 지정하지 않은 경우 Map으로 선언됨

 

 

 

List와 Set의 차이점

 

한글명인 배열, 집합에서 알 수 있듯이

 

List는 순서가 정해진 값들의 묶음,

Set은 순서가 없는 값들의 묶음이다. 

 

 

 

일반적인 리스트, 집합의 이미지를 떠올리면 이해가 쉽다.

 

리스트는 순서대로 작성되어 있고, 집합은 순서 없이 하나의 틀 안에 모여있을 뿐이다.

 

또한, '순서(index)' 가 있기 때문에 리스트는 같은 값이라도 순서에 따라 구별되지만, 집합에서는 같은 값은 하나로 처리된다.

따라서 List에서만 index 관련 기능을 사용할 수 있다.

 

  List Set
선언방법 List<[타입]> [변수 이름] = [요소];  Set<타입> [변수 이름] = {요소};
[변수 이름] = [요소]; 변수 이름 = {요소};
Index 유무 O X
중복 허용 유무 O X
공통 사용 가능한 코드 .isEmpy, add(), addAll(), remove(), length, contains(), clear()
각 타입에서만 사용 가능한 코드 indexOf(), removeAt() containsAll()