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()를 사용하여 리스트로 변환하는 것이 중요합니다. 위에서 설명한 예제들을 직접 실행해 보면서 활용법을 익혀보세요! 😊