Dart에서 List 사용법과 관련 함수 정리
Dart에서 List는 매우 자주 사용되는 컬렉션 타입으로, 배열과 유사하지만 더 많은 기능을 제공합니다. 이번 글에서는 다트에서 List의 사용법과 함께 유용한 관련 함수들을 설명합니다.
1. List 생성 및 초기화
1.1. 기본적인 List 생성
다트에서 리스트를 생성하는 방법은 여러 가지가 있습니다. 가장 기본적인 방법은 리터럴 방법으로 []
를 사용하는 것입니다.
1
2
3
4
void main() {
List<String> fruits = ['사과', '바나나', '오렌지'];
print(fruits); // 출력: [사과, 바나나, 오렌지]
}
1.2. 크기를 지정한 List 생성
리스트의 크기를 미리 지정하고 모든 요소를 기본값으로 초기화할 수도 있습니다.
1
2
3
4
void main() {
List<int> zeros = List.filled(5, 0);
print(zeros); // 출력: [0, 0, 0, 0, 0]
}
2. List 조작 함수
2.1. 요소 추가하기
리스트에 요소를 추가할 때는 add
와 addAll
함수를 사용할 수 있습니다.
1
2
3
4
5
6
7
8
void main() {
List<String> fruits = ['사과', '바나나'];
fruits.add('오렌지');
print(fruits); // 출력: [사과, 바나나, 오렌지]
fruits.addAll(['포도', '키위']);
print(fruits); // 출력: [사과, 바나나, 오렌지, 포도, 키위]
}
2.2. 특정 위치에 요소 추가하기
insert
와 insertAll
을 사용하면 특정 위치에 요소를 추가할 수 있습니다.
1
2
3
4
5
6
7
8
void main() {
List<String> fruits = ['사과', '오렌지'];
fruits.insert(1, '바나나');
print(fruits); // 출력: [사과, 바나나, 오렌지]
fruits.insertAll(2, ['포도', '키위']);
print(fruits); // 출력: [사과, 바나나, 포도, 키위, 오렌지]
}
2.3. 요소 제거하기
리스트에서 요소를 제거할 때는 remove
, removeAt
, removeLast
, removeRange
등을 사용할 수 있습니다.
remove
: 리스트에서 특정 값을 가진 첫 번째 요소를 제거합니다.1 2 3 4
List<int> numbers = [1, 2, 3, 4, 5]; bool result = numbers.remove(3); print(numbers); // 출력: [1, 2, 4, 5] print(result); // 출력: true
removeAt
: 리스트에서 특정 인덱스에 있는 요소를 제거합니다.1 2 3 4
List<int> numbers = [1, 2, 3, 4, 5]; int removedElement = numbers.removeAt(2); print(numbers); // 출력: [1, 2, 4, 5] print(removedElement); // 출력: 3
removeLast
: 리스트에서 마지막 요소를 제거합니다.1 2 3 4
List<int> numbers = [1, 2, 3, 4, 5]; int lastElement = numbers.removeLast(); print(numbers); // 출력: [1, 2, 3, 4] print(lastElement); // 출력: 5
removeRange
: 리스트에서 특정 범위에 있는 요소들을 제거합니다.1 2 3
List<int> numbers = [1, 2, 3, 4, 5]; numbers.removeRange(1, 4); print(numbers); // 출력: [1, 5]
2.4. 리스트 결합하기
두 개의 리스트를 결합할 때는 +
연산자를 사용할 수 있습니다.
1
2
3
4
5
6
void main() {
List<String> fruits1 = ['사과', '바나나'];
List<String> fruits2 = ['오렌지', '포도'];
List<String> allFruits = fruits1 + fruits2;
print(allFruits); // 출력: [사과, 바나나, 오렌지, 포도]
}
2.5. 리스트 정렬하기
리스트를 정렬할 때는 sort
메서드를 사용합니다. 역순으로 정렬할 때는 reversed
를 사용합니다.
1
2
3
4
5
6
void main() {
List<int> numbers = [5, 2, 9, 1, 5, 6];
numbers.sort();
print(numbers); // 출력: [1, 2, 5, 5, 6, 9]
print(numbers.reversed.toList()); // 출력: [9, 6, 5, 5, 2, 1]
}
3. List 탐색 함수
3.1. 특정 요소의 위치 찾기
리스트에서 특정 요소의 위치를 찾을 때는 indexOf
와 lastIndexOf
를 사용합니다.
indexOf
: 리스트에서 특정 요소가 처음으로 나타나는 인덱스를 반환합니다.lastIndexOf
: 리스트에서 특정 요소가 마지막으로 나타나는 인덱스를 반환합니다.
1
2
3
4
5
6
7
8
void main() {
List<String> fruits = ['사과', '바나나', '오렌지', '바나나'];
int index = fruits.indexOf('바나나');
print(index); // 출력: 1
int lastIndex = fruits.lastIndexOf('바나나');
print(lastIndex); // 출력: 3
}
3.2. 조건에 맞는 요소 찾기
firstWhere
, lastWhere
, singleWhere
메서드를 사용하여 조건에 맞는 요소를 찾을 수 있습니다.
firstWhere
: 조건을 만족하는 첫 번째 요소를 찾습니다.lastWhere
: 조건을 만족하는 마지막 요소를 찾습니다.singleWhere
: 조건을 만족하는 유일한 요소를 찾습니다. 조건을 만족하는 요소가 두 개 이상이면 예외가 발생합니다.
1
2
3
4
5
6
7
8
9
10
11
12
void main() {
List<int> numbers = [1, 2, 3, 4, 5, 6];
int firstEven = numbers.firstWhere((number) => number % 2 == 0);
print(firstEven); // 출력: 2
int lastEven = numbers.lastWhere((number) => number % 2 == 0);
print(lastEven); // 출력: 6
int single = numbers.singleWhere((number) => number == 3);
print(single); // 출력: 3
}
4. List 변환 함수
4.1. 리스트를 문자열로 변환하기
리스트를 문자열로 변환할 때는 join
메서드를 사용합니다.
1
2
3
4
5
void main() {
List<String> fruits = ['사과', '바나나', '오렌지'];
String result = fruits.join(', ');
print(result); // 출력: 사과, 바나나, 오렌지
}
4.2. 리스트의 요소를 변환하기
map
메서드를 사용하여 리스트의 요소를 다른 형태로 변환할 수 있습니다.
1
2
3
4
5
void main() {
List<int> numbers = [1, 2, 3];
List<String> strings = numbers.map((number) => '숫자 $number').toList();
print(strings); // 출력: [숫자 1, 숫자 2, 숫자 3]
}
4.3. 리스트 필터링하기
where
메서드를 사용하여 특정 조건을 만족하는 요소만을 포함하는 새로운 리스트를 만들 수 있습니다.
1
2
3
4
5
void main() {
List<int> numbers = [1, 2, 3, 4, 5, 6];
List<int> evens = numbers.where((number) => number % 2 == 0).toList();
print(evens); // 출력: [2, 4, 6]
}
5. List 기타 기능
5.1. 리스트의 부분 리스트 만들기
리스트의 일부 요소를 추출하여 새로운 리스트를 만들 때는 sublist
메서드를 사용합니다.
1
2
3
4
5
void main() {
List<String> fruits = ['사과', '바나나', '오렌지', '포도', '키위'];
List<String> subList = fruits.sublist(1, 3);
print(subList); // 출력: [바나나, 오렌지]
}
5.2. 리스트를 고정 크기로 만들기
리스트를 고정 크기로 만들어서 크기를 변경할 수 없도록 할 때는 List.unmodifiable
을 사용합니다.
1
2
3
4
5
6
7
void main() {
List<String> fruits = ['사과', '바나나', '오렌지'];
List<String> unmodifiableList = List.unmodifiable(fruits);
print(unmodifiableList); // 출력: [사과, 바나나, 오렌지]
// unmodifiableList.add('포도'); // 에러 발생
}
5.3. 리스트 비교하기
두 리스트가 같은지 비교할 때는 ListEquality
를 사용할 수 있습니다.
1
2
3
4
5
6
7
8
9
10
11
import 'package:collection/collection.dart';
void main() {
ListEquality equality = ListEquality();
List<int> list1 = [1, 2, 3];
List<int> list2 = [1, 2, 3];
List<int> list3 = [1, 2, 4];
print(equality.equals(list1, list2)); // 출력: true
print(equality.equals(list1, list3)); // 출력: false
}