Dart는 강력한 컬렉션 타입을 제공하며, 그중 Set 타입은 중복 없는 요소를 저장하는 특별한 컬렉션입니다. 이번 포스팅에서는 Dart의 Set 타입 사용법과 실전 활용 예제를 살펴보겠습니다.
1. Set 타입이란?
Set은 리스트(List)와 유사한 컬렉션이지만, 중복된 값을 허용하지 않는다는 점이 가장 큰 차이점입니다. Set은 주로 데이터의 유일성(uniqueness) 을 보장해야 하는 경우 유용하게 사용됩니다.
2. Dart에서 Set 선언 및 사용법
Dart에서 Set을 선언하는 방법은 다음과 같습니다.
1) Set 선언과 초기화
void main() {
// 빈 Set 생성
Set<int> numbers = {};
print(numbers); // {}
// 값이 포함된 Set 생성
Set<String> fruits = {'apple', 'banana', 'orange'};
print(fruits); // {apple, banana, orange}
}
2) 중복된 값 처리
Set은 동일한 값을 여러 번 추가해도 한 번만 저장됩니다.
void main() {
Set<int> numbers = {1, 2, 2, 3, 4, 4, 5};
print(numbers); // {1, 2, 3, 4, 5}
}
3. Set의 주요 메서드
Dart의 Set에서 자주 사용되는 메서드를 정리해보았습니다.
메서드 | 설명 |
add(value) | 새로운 요소 추가 |
addAll(iterable) | 여러 개의 요소 추가 |
remove(value) | 특정 요소 삭제 |
contains(value) | 특정 요소 포함 여부 확인 |
clear() | 모든 요소 삭제 |
length | 요소 개수 확인 |
1) 요소 추가 및 삭제
void main() {
Set<String> fruits = {'apple', 'banana'};
fruits.add('orange');
fruits.remove('banana');
print(fruits); // {apple, orange}
}
2) 특정 요소 포함 여부 확인
void main() {
Set<int> numbers = {10, 20, 30};
print(numbers.contains(20)); // true
print(numbers.contains(40)); // false
}
3) Set을 List로 변환
void main() {
Set<int> numbers = {1, 2, 3};
List<int> numberList = numbers.toList();
print(numberList); // [1, 2, 3]
}
4. Set 활용 예제
1) 리스트에서 중복 제거하기
리스트(List)에서 중복된 요소를 제거할 때 Set을 활용하면 간단합니다.
void main() {
List<int> numbers = [1, 2, 2, 3, 3, 3, 4, 5];
Set<int> uniqueNumbers = numbers.toSet();
print(uniqueNumbers); // {1, 2, 3, 4, 5}
}
2) 두 개의 Set 연산 (교집합, 합집합, 차집합)
Dart의 Set은 합집합, 교집합, 차집합과 같은 수학적인 집합 연산도 지원합니다.
void main() {
Set<int> setA = {1, 2, 3, 4};
Set<int> setB = {3, 4, 5, 6};
print(setA.union(setB)); // {1, 2, 3, 4, 5, 6} (합집합)
print(setA.intersection(setB)); // {3, 4} (교집합)
print(setA.difference(setB)); // {1, 2} (차집합)
}
5. Set을 사용할 때 주의할 점
- 중복된 값을 저장할 수 없음 → 중복된 데이터가 필요하다면 List를 사용해야 합니다.
- 순서가 보장되지 않음 → 순서가 중요하다면 List로 변환해야 합니다.
- Set의 성능 → Set은 내부적으로 해시 테이블을 사용하기 때문에 검색 및 추가/삭제 연산이 리스트보다 빠릅니다.
마무리
Dart의 Set 타입은 중복을 방지하고, 빠른 검색이 필요한 경우 강력한 성능을 제공합니다. 특히, 중복 제거, 집합 연산, 빠른 검색 등의 기능이 필요할 때 사용하기 좋습니다! 😊