플러터 앱 개발

Chapter 5. Dart 심화 문법 A - 컬렉션(List, Set, Map)

yuna 2025. 12. 9. 21:41

안녕하세요 여러분!!

 

오늘은 컬렉션에 대해서 알아봅시다~!!

컬렉션은 이름에서 느껴지는 것처럼 하나의 묶음을 나타내는 의미인 것 같죠?

 

컬렉션도 지난 포스팅에서 배운 조건문과 반복문처럼

더 효율적인 코드 작성을 위해 반드시 필요한 개념이니 꼭 기억 하셔야 합니다!!!!

 

그럼 시작할게요!ㅎㅎ

 


컬렉션

: 여러 개의 값을 그룹으로 묶어서 효율적으로 관리할 수 있는 문법

 

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