Post

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. 요소 추가하기

리스트에 요소를 추가할 때는 addaddAll 함수를 사용할 수 있습니다.

1
2
3
4
5
6
7
8
void main() {
  List<String> fruits = ['사과', '바나나'];
  fruits.add('오렌지');
  print(fruits);  // 출력: [사과, 바나나, 오렌지]

  fruits.addAll(['포도', '키위']);
  print(fruits);  // 출력: [사과, 바나나, 오렌지, 포도, 키위]
}

2.2. 특정 위치에 요소 추가하기

insertinsertAll을 사용하면 특정 위치에 요소를 추가할 수 있습니다.

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. 특정 요소의 위치 찾기

리스트에서 특정 요소의 위치를 찾을 때는 indexOflastIndexOf를 사용합니다.

  • 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
}
This post is licensed under CC BY 4.0 by the author.