[Dart] 리스트(List) 각 요소를 변환하여 새 리스트 만들기 - map() 함수

1. Dart의 map() 함수란?

Dart에서 map() 함수는 리스트의 각 요소를 변환하여 새로운 리스트를 생성하는 기능을 합니다. 기존 리스트의 원소를 다른 형태로 변경할 때 유용하게 사용할 수 있습니다.

 

 

2. map() 함수의 사용법

List<int> numbers = [1, 2, 3, 4];
List<int> squaredNumbers = numbers.map((num) => num * num).toList();
print(squaredNumbers); // [1, 4, 9, 16]

매개변수 설명

  • num: 리스트의 각 요소를 순회하면서 변환되는 값
  • 반환값: 새로운 리스트의 각 요소로 변환된 값

위 코드에서 map() 함수는 리스트 [1, 2, 3, 4]의 각 요소를 제곱하여 [1, 4, 9, 16]을 반환합니다.

 

 

3. map() 함수의 동작 원리

위 예제의 동작 순서를 단계별로 살펴보겠습니다.

  • 1 → 1 * 1 = 1
  • 2 → 2 * 2 = 4
  • 3 → 3 * 3 = 9
  • 4 → 4 * 4 = 16

최종적으로 [1, 4, 9, 16]이 반환됩니다.

 

 

4. 다양한 예제

4.1 문자열 변환

List<String> words = ["hello", "dart", "flutter"];
List<String> upperCaseWords = words.map((word) => word.toUpperCase()).toList();
print(upperCaseWords); // ["HELLO", "DART", "FLUTTER"]

 

4.2 객체 변환

void main() {
  List<User> users = [User("Alice", 25), User("Bob", 30)];
  List<String> userNames = users.map((user) => user.name).toList();
  print(userNames); // ["Alice", "Bob"]
}

class User {
  String name;
  int age;

  User(this.name, this.age);
}

 

 

5. map() 사용 시 주의점

5.1 .toList() 호출 필요

map() 함수는 Iterable을 반환하므로, 리스트가 필요한 경우 .toList()를 호출해야 합니다.

List<int> numbers = [1, 2, 3];
var squaredNumbers = numbers.map((num) => num * num); 
print(squaredNumbers); // (1, 4, 9) (Iterable 타입)
print(squaredNumbers.toList()); // [1, 4, 9]

 

5.2 원본 리스트 유지

map() 함수는 기존 리스트를 변경하지 않고 새로운 리스트를 반환합니다.

List<int> numbers = [1, 2, 3];
numbers.map((num) => num * 2);
print(numbers); // [1, 2, 3] (변경되지 않음)

 

 

6. map() vs forEach() 차이점

함수 반환 값 사용 목적
map() 새로운 리스트 반환 요소 변환
forEach() 리스트 반환 없음 각 요소에 대한 연산 수행

forEach() 예제를 보면 map() 함수와 어떤 차이가 있는지 쉽게 알 수 있습니다.

List<int> numbers = [1, 2, 3];
numbers.forEach((num) => print(num * num)); // 단순 출력 (리스트 반환 없음)

실행 결과는 다음과 같습니다.

1
4
9

 

 

7. 마무리

Dart의 map() 함수는 리스트의 각 요소를 변환하여 새로운 리스트를 만들 때 매우 유용합니다. 기존 리스트를 변경하지 않고 원하는 변환을 적용할 수 있으며, .toList()를 사용하여 리스트로 변환하는 것이 중요합니다. 위에서 설명한 예제들을 직접 실행해 보면서 활용법을 익혀보세요! 😊