Dart에서 toList()
와 toMap()
메서드는
리스트와 맵 자료구조 간의 변환을 쉽게 할 수 있게 해주는 유용한 도구입니다.
이들은 데이터 구조를 필요에 따라 변경하고,
각 상황에 맞는 기능을 활용할 수 있도록 도와줍니다.toList()
와 toMap()
메서드의 기본 사용법부터 고급 활용법을 알아보겠습니다.
1. toList()
메서드: 리스트로 변환하기
toList()
메서드는 Dart의 다양한 컬렉션 타입을 List
로 변환합니다.
주로 Set
이나 Iterable
타입을 List
로 바꿀 때 사용되며,
모든 요소를 포함하는 새로운 리스트를 생성하여 반환합니다.
1.1 toList()
기본 예제
void main() {
Set<String> fruits = {'Apple', 'Banana', 'Orange'}; // Set을 List로 변환
List<String> fruitList = fruits.toList();
print(fruitList); // 출력: [Apple, Banana, Orange]
}
이 예제에서는 Set
타입의 fruits
를 toList()
를 사용하여
List
타입의 fruitList
로 변환합니다.
결과적으로 fruitList
는
['Apple', 'Banana', 'Orange']
라는 리스트가 됩니다.
1.2 Map
에서 toList()
사용하기
Map
에서 toList()
를 사용하려면keys
나 values
속성을 통해 키나 값을 먼저 추출한 후
리스트로 변환해야 합니다.
void main() {
Map<String, int> scores = {'John': 90, 'Emma': 85, 'Alex': 88}; // Map의 키들을 List로 변환
List<String> keys = scores.keys.toList(); // Map의 값들을 List로 변환
List<int> values = scores.values.toList();
print(keys); // 출력: [John, Emma, Alex]
print(values); // 출력: [90, 85, 88]
}
1.3 toList()
고급 활용: 필터링 후 리스트로 변환하기
where
메서드와 toList()
를 함께 사용하면
필터링된 요소들만 리스트로 변환할 수 있습니다.
이는 특정 조건을 만족하는 데이터만 선별하여 리스트로 저장할 때 유용합니다.
void main() {
List<int> numbers = [1, 2, 3, 4, 5, 6]; // 짝수만 추출하여 List로 변환
List<int> evenNumbers = numbers.where((num) => num % 2 == 0).toList();
print(evenNumbers); // 출력: [2, 4, 6]
}
이 예제에서는 numbers
리스트에서 짝수만 추출하고
toList()
를 이용해 새로운 리스트로 변환합니다.
이렇게 하면 필터링된 리스트를 다른 작업에 즉시 활용할 수 있습니다.
2. toMap()
메서드: 맵으로 변환하기
toMap()
은 리스트나 다른 형태의 컬렉션을 Map
으로 변환하는 데 사용됩니다.
Dart에서 기본적으로 제공하는 메서드는 아니지만,
주로 리스트를 맵으로 변환할 때 특정 조건이나 규칙에 따라 사용자 정의 함수로 구현합니다.
2.1 리스트를 Map
으로 변환하는 기본 예제
리스트의 각 요소를 인덱스를 키로,
요소 자체를 값으로 사용하여 Map
으로 변환할 수 있습니다.
void main() {
List<String> names = ['John', 'Emma', 'Alex'];
Map<int, String> nameMap = {for (var i = 0; i < names.length; i++) i: names[i]};
print(nameMap); // {0: John, 1: Emma, 2: Alex}
}
이 예제에서는 for
루프를 사용하여 names
리스트를 Map
으로 변환합니다.
각 키는 리스트의 인덱스를, 값은 해당 인덱스의 요소를 나타냅니다.
2.2 MapEntry
를 사용한 리스트 변환
Dart에서는 MapEntry
클래스를 활용하여 리스트 요소를 맵으로 변환할 수 있습니다.
void main() {
List<String> fruits = ['Apple', 'Banana', 'Orange'];
Map<String, int> fruitMap = {for (var fruit in fruits) fruit: fruit.length};
print(fruitMap); // {Apple: 5, Banana: 6, Orange: 6}
}
이 예제에서는 각 과일 이름을 키로, 이름의 길이를 값으로 하는 맵을 생성합니다.MapEntry
를 사용하면 변환 규칙을 쉽게 적용할 수 있습니다.
2.3 리스트를 특정 규칙에 따라 Map
으로 변환하는 고급 예제
복잡한 데이터를 특정 규칙에 따라 Map
으로 변환할 수 있습니다.
예를 들어, 사용자 정보를 담은 리스트를 사용자 ID를 키로,
사용자 이름을 값으로 가지는 맵으로 변환할 수 있습니다.
class User {
final int id;
final String name;
User(this.id, this.name);
}
void main() {
List<User> users = [ User(1, 'John'), User(2, 'Emma'), User(3, 'Alex') ];
Map<int, String> userMap = {for (var user in users) user.id: user.name};
print(userMap); // {1: John, 2: Emma, 3: Alex}
}
이 예제에서는 User
클래스의 인스턴스 리스트를 id
를 키로,
name
을 값으로 하는 맵으로 변환합니다.
이 방법을 사용하면 특정 객체의 필드를
키로 지정하여 Map
을 쉽게 생성할 수 있습니다.
3. toList()
와 toMap()
을 활용한 응용 예제
toList()
와 toMap()
을 사용하여
데이터를 구조화하고, 필터링하며, 변환하는 복합 예제입니다.
3.1 상품 데이터 변환 예제
상품 리스트에서 재고가 있는 상품만 필터링하고,
상품 이름을 키로, 가격을 값으로 가지는 맵으로 변환해보겠습니다.
class Product {
final String name;
final double price;
final bool inStock;
Product(this.name, this.price, this.inStock);
}
void main() {
List<Product> products = [ Product('Laptop', 1500, true),
Product('Phone', 800, false),
Product('Tablet', 600, true) ]; // 재고가 있는 상품만 필터링하여 Map으로 변환
Map<String, double> availableProducts = {
for (var product in products.where((p) => p.inStock)) product.name: product.price
};
print(availableProducts); // {Laptop: 1500, Tablet: 600}
}
이 예제에서는 where
메서드를 활용하여
inStock
이 true
인 상품만을 선별하고,
이를 맵 형태로 변환합니다.
이러한 방식을 통해 재고가 있는 상품의 이름과 가격으로
구성된 맵을 손쉽게 생성할 수 있습니다.
결론
toList()
와 toMap()
메서드는 데이터 변환을 간편하게 해주는 강력한 도구입니다.
단순히 컬렉션을 다른 형태로 바꾸는 것을 넘어서,
특정 조건에 따라 데이터를 필터링하거나 가공하여 활용할 수 있는 유연성을 제공합니다.
'develop > Flutter' 카테고리의 다른 글
Dart에서 Currying 사용하기 - 커링 함수사용하여 코드 질 높이기 (0) | 2024.11.18 |
---|---|
Dart의 고오급 함수를 적절히 사용하여 코드 퀄리티 높이기 (1) | 2024.11.17 |
Dart에서 맵(map) 다루기 (0) | 2024.11.11 |
Dart에서 리스트(List) 다루기 (0) | 2024.11.10 |
flutter 엑셀 파싱 모델 데이터 형태로 사용하기 (1) | 2024.11.08 |