Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- 자바 포맷 출력
- java
- Flutter
- 배포
- develop
- DART
- Clean Architecture
- react
- 자바 출력 방식
- unity
- JQ
- lifecycle
- abap
- JS
- ListView
- 앱심사
- java 출력
- printf
- UI/UX
- riverpod
- 자바스크립트
- firebase
- 엡
- npm
- nodejs
- java 콘솔 출력 차이
- println
- scss
- 단축키
- LLM
Archives
- Today
- Total
guricode
잘 모르면 애매한 Dart 간단 정리 - Collections (2) 본문
이번엔 Dart 컬렉션 중에서 Set과 Map에 대해 정리해봤다. List와는 다른 특징들을 가지고 있어서 언제 쓰면 좋은지 구분할 수 있어야 한다.
Set
어떤 친구인가요?
- 중복되지 않은 값들의 집합
- 수학의 집합 개념과 비슷함
- 요소의 순서를 보장하지 않음
- Index가 없음 (즉, set[0] 이런거 불가)
어떻게 생겼나요?
Set<int> numbers = {1, 2, 3, 4, 5};
Set<int> empty = {}; // 비어있는 Set
var numbers = {1, 2, 3}; // Set<int>로 추론
final numbers = {1, 2, 3};
const names = {'Alice', 'Bob'};
var names = <String>{}; // 명시적으로 빈 Set 생성
주의할 점
var numbers = {};
print(numbers.runtimeType); // LinkedHashMap<dynamic, dynamic>
- 이렇게 선언하면 Map으로 인식되기 때문에 빈 Set은 var s = <Type>{}; 형태로 써야 함
타입 관련 특징
Set<String> fruits = {'사과', '파인애플', '오렌지', 8};
// Error: int 타입 요소는 허용 안 됨
- Set은 요소 타입이 통일되어야 함
- 타입을 명시하지 않으면 다양한 타입을 담을 수 있지만, 내부 타입은 Object로 추론됨
var fruits = {'사과', '파인애플', '오렌지', 8};
print(fruits.runtimeType); // _Set<Object>
중복 제거 기능
var fruits = {'사과', '파인애플', '사과'};
print(fruits); // {사과, 파인애플}
- 중복된 요소는 자동으로 제거됨
- 그래서 Set은 주로 "중복 제거" 용도로 많이 사용됨
메서드 및 속성들
final fruits = {'사과', '파인애플', '오렌지'};
print(fruits.length); // 3
print(fruits.isEmpty); // false
print(fruits.isNotEmpty); // true
fruits.add('복숭아');
fruits.addAll({'포도', '귤'});
fruits.remove('파인애플');
print(fruits.contains('사과')); // true
print(fruits.containsAll({'사과', '귤'})); // true or false
- add(): 요소 하나 추가
- addAll(): 여러 요소 추가
- remove(): 특정 요소 삭제
- contains(), containsAll(): 포함 여부 확인
Map
어떤 친구인가요?
- Key와 Value가 쌍으로 구성된 자료 구조
- 각각의 Key는 고유해야 하며, Value는 중복 가능
선언 방식
Map<String, String> people = {'Alice': 'Teacher', 'Bob': 'Student'};
Map<String, String> empty = {};
var people = {'Alice': 'Teacher'};
final people = {'Alice': 'Teacher'};
const animals = {'Dog': 3, 'Cat': 5};
- 빈 Map 생성 시도 시 주의:
var map = {}; // LinkedHashMap<dynamic, dynamic>
타입 관련 예시
Map<String, int> people = {'Alice': 25, 'Bob': 'Teacher'};
// Error: 'Teacher'는 int 타입이 아님
- 타입 명시 안하면:
var people = {'Alice': 25, 45: 'Bob'};
print(people.runtimeType); // LinkedHashMap<Object, Object>
Key 중복 시
Map<String, int> people = {'Alice': 25, 'Bob': 25, 'Alice': 23};
print(people); // {Alice: 23, Bob: 25}
- 나중에 등장한 값으로 덮어씀
메서드 및 속성들
Map<String, int> people = {'Alice': 25, 'Bob': 30};
print(people.length); // 2
print(people.isEmpty); // false
print(people.isNotEmpty); // true
print(people['Alice']); // 25
print(people['Paul']); // null
people['Alice'] = 28; // 값 수정
people['Charlie'] = 35; // 새로운 키-값 추가
people.remove('Bob');
print(people.containsKey('Alice')); // true
print(people.keys); // (Alice, Charlie)
print(people.values); // (28, 35)
✅ List vs Set 비교 정리
ListSet
| 순서 유무 | O | X |
| Index 유무 | O | X |
| 중복 허용 | O | X |
'앱 > Flutter&Dart' 카테고리의 다른 글
| Dart 간단 정리 - 컬렉션 고차 함수 & Map 고급 활용 (0) | 2025.06.24 |
|---|---|
| 잘 모르면 애매한 Dart 간단 정리 - enum (0) | 2025.06.24 |
| 잘 모르면 애매한 Dart 간단 정리 - Collections (1) (0) | 2025.06.24 |
| 잘 모르면 애매한 Dart 간단 정리 - for-in 순회식 & continue 키워드 정리 (0) | 2025.06.24 |
| 잘 모르면 애매한 Dart 간단 정리 - 타입 체크 연산자 (0) | 2025.06.23 |