Dart Collection 중 하나인 'Set'에 대해 살펴보겠습니다.
Set은 중복되지 않은 요소의 집합으로 구성된 객체입니다.
Set 선언하기
'Set' 또는 타입 추론 자료형인 'var', 'dynamic'으로 변수를 선언한 뒤
값으로 Set의 literal인 <type>{} 또는 Set() 함수 실행결과를 할당하면 됩니다.
💡 리터럴 '{}'은 Map의 리터럴과 같습니다. 그래서 변수 타입을 Set으로 지정하지 않고 타입 추론 자료형인 'var', 'dynamic'을 사용하는 경우 '<type>{}' 이런 식으로 사용해야 합니다. (Generic을 지정함으로 key, value쌍의 Map이 아닌 Set임을 인식합니다.)
Set set1 = {};
var set2 = <String>{};
dynamic set3 = <String>{};
var set4 = Set();
dynamic set5 = Set();
Set에는 'Grneric'이라는 옵션이 있는데 해당 옵션을 지정하여
Set에 할당되는 값의 자료형을 제한할 수 있습니다. '< >'를 사용해 Generic을 지정합니다.
Generic으로 지정된 자료형 외의 값을 추가하는 경우 오류 발생합니다.
Set<String> set1 = {'value1', 'value2'}; // String 타입의 요소만 할당가능
Set<int> set2 = {1, 2, 3}; // int 타입의 요소만 할당가능
Set 원소 다루기
Set에 들어있는 값 하나하나를 '원소'라고 합니다.
해당 원소를 조회, 입력, 삭제하는 법에 대해 알아보겠습니다.
Set 원소 접근하기
Set에서 특정한 원소를 접근하는 경우는 거의 없습니다.
value로만 이루어진 집합으로 List나 Map처럼 Key(Index)가 없기 때문입니다.
주로 forEach함수로 돌면서 원소에 접근하여 작업하는 경우가 대부분입니다.
하지만 이글에서 소개는 하겠습니다.
- 1. Set.elementAt(index)를 통해 index번째 요소에 접근합니다.
- 2. Set.forEach(function) Set의 모든 요소를 돌면서 function을 실행합니다. (이때 익명 함수 사용..)
Set set1 = {'value1', 'value2', 'value3', 'value4'};
print(set1.elementAt(0)); // value1
set1.forEach((element) {
print(element);
});
// --> value1, value2, value3, value4 모든요소 돌면서 출력.
Set 원소 추가하기
Set에 원소를 추가할 때 이미 있는 원소는 추가되지 않습니다. (중복되지 않는 요소의 집합이 Set이기 때문..)
- 1. set.add(value)를 통해 추가합니다.
- 2. set.addAll(Iterable <E> elements)를 통해 여러 원소를 한 번에 추가합니다.
Set set1 = {};
set1.add('value1');
print(set1); // {value1}
set1.addAll({'value1', 'value2', 'value3'});
print(set1); // {value1, value2, value3}
Set 원소 삭제하기
- Set.remove(value) 함수를 통해 value에 해당하는 원소 삭제합니다.
- Set.clear() 함수를 통해 Set의 모든 원소를 삭제합니다.
Set set1 = {'value1', 'value2', 'value3'};
set1.remove('value1');
print(set1); // {value2, value3}
set1.clear();
print(set1); // {}
Properties (속성)
Set에서 기본 제공하는 유용한 속성들을 소개합니다.
- Set.length --> Set의 원소 개수를 반환합니다.
- Set.isEmpty --> Set이 비었는지 여부를 반환합니다.
- Set.isNotEmpty --> Set이 안 비었는지 여부를 반환합니다.
- Set.first --> Set의 첫 번째 원소를 반환합니다.
- Set.last --> Set의 마지막 원소를 반환합니다.
- Set.iterator --> Set을 iterator타입으로 반환합니다.
기타 함수(Method) 들
- Set.contains(value) --> Set에 value원소가 있는지 여부 반환합니다.
- Set.containsAll(Iterable obj) --> Set이 obj의 모든 요소를 포함하는지 여부 반환합니다.
- Set.union(otherSet) --> Set과 otherSet을 합쳐 새로운 Set객체를 반환합니다.