안녕하세요 여러분!!
오늘은 컬렉션에 대해서 알아봅시다~!!
컬렉션은 이름에서 느껴지는 것처럼 하나의 묶음을 나타내는 의미인 것 같죠?
컬렉션도 지난 포스팅에서 배운 조건문과 반복문처럼
더 효율적인 코드 작성을 위해 반드시 필요한 개념이니 꼭 기억 하셔야 합니다!!!!

그럼 시작할게요!ㅎㅎ
컬렉션
: 여러 개의 값을 그룹으로 묶어서 효율적으로 관리할 수 있는 문법
List, Set, Map
컬렉션 종류
1) List: 순서가 있는 값들이 묶인 형태, 배열
형태
- List <타입> 변수이름=[요소1,요소2...];
- var 변수 이름=[요소]; / List 요소에 변동이 없는 경우final, const로 선언 가능
- 요소가 없다면 List <타입> 변수이름=[ ]; 형태로도 가능
var numbers=[ ]; //var 타입과 함께 요소 없이 선언 가능
var names=<String>[];
특징
- 같은 리스트 안에 있는 요소들은 모두 같은 타입으로 설정
- index(순서)를 통해 각 요소에 접근 가능하며, 첫번째 요소는 0부터 시작
- index를 통해 요소 변경도 가능
- List를 선언할 때 요소의 타입을 정해 주지 않은 경우에는 List 안에 있는 요소의 타입이 달라도 가능
-> .runtimeType을 통해 객체의 타입을 반환
1)
List <int> numbers=[1,2,3,4,5];
print(numbers[2]); //타입 이름[index 번호]를 프린트에 넣으면 해당 순서의 번호가 출력
//0부터 번호가 시작이므로 2번 순서는 3이 출력
2)
var numbers=[1,2,3,4,5];
print(numbers[3]); //3번 순서인 4가 출력
numbers[3]=2; //3번을 2로 변경
print(numbers[3]); //2 출력
//but, List를 상수로 선언 시 요소 변경은 불가능
3)
const fruits = ['사과', '파인애플', '오렌지', 8];
print(fruits.runtimeType); // List<Object> string과 int의 상위 클래스인 object로 추론
List의 요소를 관리할 수 있는 속성
- length: 요소의 개수를 구할 때 사용
- isEmpty: List에 있는 요소의 유무를 파악 / 요소가 없으면 true, 있으면 false 반환 / 반대의 의미로 isNotEmpty도 있음
- indexOf(): 특정 요소의 Index를 알 수 있음
- add(): 요소 하나를 추가할 때 사용
- addAll(): 여러 요소를 추가할 때 사용
- remove(): 삭제할 요소를 ( ) 안에 넣으면 삭제
- removeAt(): 삭제할 요소의 Index를 ( ) 안에 넣으면 삭제
- clear(): 모든 요소를 삭제(초기화) 진행
2) Set: 중복되지 않은 값들이 묶인 형태
형태
- Set<타입>변수 이름={요소1, 요소2...};
- var 변수 이름={요소}; / Set 요소에 변동이 없는 경우 final, const로 선언 가능
- 요소가 없다면 Set<타입>변수 이름={ }; 형태로도 가능
var names=<String>{};
//Set 안에 요소 없이 선언 가능
var names={}; //이 형태는 numbers가 Map 타입이 되기 때문에 불가능
특징
- 같은 리스트 안에 있는 요소들은 모두 같은 타입으로 설정
- Set을 선언할 때 요소의 타입을 정해 주지 않은 경우에는 Set 안에 있는 요소의 타입이 달라도 가능
- -> List와 동일하게 .runtimeType 사용하여 객체의 타입 추론 후 반환 가능
- 순서가 없기 때문에 Index라는 개념이 없음
- 중복된 값이 있으면 하나를 제외하고는 모두 무시 -> 주로 중복값을 제거하고 싶을 때 사용
List의 요소를 관리할 수 있는 속성
- length: 요소의 개수를 구할 때 사용
- isEmpty: Set에 있는 요소의 유무를 파악 / 반대의 의미로 isNotEmpty도 있음 -> List와 동일
- add(): 요소 하나를 추가할 때 사용
- addAll(): 여러 요소를 추가할 때 사용
- remove(): 삭제할 요소를 ( ) 안에 넣으면 삭제
- contains(): 하나의 요소가 포함되어 있는지 판별
- containsAll(): 여러 요소가 포함되어 있는지 판별할 때 사용, ( )에 넣은 요소 중 하나라도 없으면 false
3) Map: 키(key)와 값(Value)이 묶인 하나의 쌍
형태
- Map<key 타입, value 타입> 변수 이름 = {key: value};
- var 변수 이름 = {key:value}; / Set 요소에 변동이 없는 경우 final, const로 선언 가능
- 요소가 없다면 Map<key 타입, value 타입> 변수 이름 = {}; 형태로도 가능
Map<String, String> people = {'Alice': 'Teacher', 'Bob': 'Student'};
alice, bob이 key이며 teacher, student가 value가 된다. 각각 string 타입으로 선언
특징
- 키들과 값들은 각각 타입이 같아야 함
- Map을 선언할 때 요소의 타입을 정해 주지 않은 경우에는 Map 안에 있는 요소의 타입이 달라도 가능
- -> List,Set과 동일하게 .runtimeType 사용하여 객체의 타입 추론 후 반환 가능
- 키와 값을 서로 다른 타입으로 구성할 수 있음
- 키는 중복될 수 없지만, 값을 중복 가능
1)
Map<String, int> people = {'sumin': 25, 'jimin': 'Teacher'};
// Value 타입을 Int로 선언했는데 jimin의 값이 string으로 작성되어 Error
2)
Map<String, int> people = {'sumin': 25, 'jimin': 25, 'sumin': 23};
print(people); // key는 중복될 수 없지만, 값은 중복될 수 있으므로 sumin: 23, jimin: 25 출력
//key가 중복될 경우 가장 마지막에 작성된 key가 출력!
요소를 관리할 수 있는 속성
- length: 요소의 개수 파악
- is Empty: Map에 요소의 유무 파악
- 변수 이름['키 이름'] : Map에 있는 값을 검색
- 변수 이름['키 이름']=값; : 키의 값을 수정
- 변수 이름['새로운 키 이름']=값; : 새로운 키와 값의 쌍을 추가할 수 있음
- remove(): 요소 삭제 가능
- containsKey(): 특정 요소가 있는지 파악
- keys: Map에 있는 모든 key 파악
- values: Map에 있는 모든 value 파악
1)
Map<String, int> people = {'sumin': 25, 'jimin': 30};
print(people['sumin']); // sumin의 값인 25가 출력
2)
Map<String, int> people = {'sumin': 25, 'jimin': 30};
people['sumin'] = 28;
print(people); // {sumin: 28, jimin: 30}
print(people['sumin']); // sumin의 수정된 값인 28로 출력
3)
Map<String, int> people = {'sumin': 25, 'jimin': 30};
people['Charlie'] = 35;
print(people); // charlie가 추가된 {sumin: 25, jimin: 30, Charlie: 35} 출력
4)
Map<String, int> people = {'sumin': 25, 'jimin': 30};
people.remove('jimin');
print(people); // jimin이 삭제 되었기 때문에 {sumin: 25}만 출력
print(people['jimin']); // jimin이 삭제 되었기 때문에 null이 출력
5)
Map<String, int> people = {'sumin': 25, 'Bob': 30};
print(people.containsKey('sumin')); // sumin이라는 요소가 있기 때문에 true 출력
print(people.containsKey('Paul')); // paul은 없기 떄문에 false
총 정리!
| List | Set | |
| 순서 유무 | o | x |
| Index 유무 | o | x |
| 중복 허용 여부 | o | x |
'플러터 앱 개발' 카테고리의 다른 글
| [Dart 심화] 개인 과제 2 트러블 슈팅 (0) | 2025.12.12 |
|---|---|
| Chapter 6. Dart 심화 문법 B - 열거형(Enumerations) (0) | 2025.12.10 |
| Chapter 4. Dart 기본 문법 C - 조건문과 반복문+주석 (0) | 2025.12.08 |
| Chapter 3. Dart 기본 문법 B - 연산자 (0) | 2025.12.08 |
| [Dart 기초] 개인 과제 트러블 슈팅 (0) | 2025.12.04 |