본문 바로가기
Flutter

Dart - Map의 활용

by kaywalker 2024. 12. 4.

1.사용자 정보 관리

Map<String, dynamic> userInfo = {
  'name': '김철수',
  'age': 25,
  'email': 'kim@example.com',
  'isActive': true,
};

// 접근 및 수정
print(userInfo['name']);  // 김철수
userInfo['age'] = 26;

 

2.캐시 또는 메모이제이션

Map<String, dynamic> cache = {};

dynamic expensiveOperation(String key) {
  if (cache.containsKey(key)) {
    return cache[key];
  }
  
  // 계산 로직...
  final result = someExpensiveCalculation();
  cache[key] = result;
  return result;
}

 

3.상태 관리

enum OrderStatus { pending, processing, shipped, delivered }

Map<String, OrderStatus> orderStatuses = {
  'ORDER001': OrderStatus.pending,
  'ORDER002': OrderStatus.shipped,
};

// 주문 상태 업데이트
void updateOrderStatus(String orderId, OrderStatus newStatus) {
  orderStatuses[orderId] = newStatus;
}

 

4.다국어 지원

Map<String, Map<String, String>> translations = {
  'en': {
    'greeting': 'Hello',
    'farewell': 'Goodbye'
  },
  'ko': {
    'greeting': '안녕하세요',
    'farewell': '안녕히 가세요'
  }
};

String translate(String language, String key) {
  return translations[language]?[key] ?? 'Translation not found';
}

 

5.점수 기록

Map<String, int> scores = {};

void updateScore(String playerName, int points) {
  scores[playerName] = (scores[playerName] ?? 0) + points;
}

// 상위 점수 가져오기
List<MapEntry<String, int>> getTopScores() {
  var sortedEntries = scores.entries.toList()
    ..sort((a, b) => b.value.compareTo(a.value));
  return sortedEntries.take(3).toList();
}

 

6.설정 관리

Map<String, dynamic> appSettings = {
  'darkMode': true,
  'fontSize': 16,
  'notifications': {
    'email': true,
    'push': false,
    'sound': true
  }
};

// 중첩된 설정 접근
bool isPushEnabled = appSettings['notifications']['push'];

 

7.이벤트 핸들러 관리

Map<String, Function(dynamic)> eventHandlers = {
  'click': (data) => print('Clicked: $data'),
  'hover': (data) => print('Hover: $data'),
  'submit': (data) => print('Submitted: $data'),
};

void handleEvent(String eventType, dynamic data) {
  eventHandlers[eventType]?.call(data);
}

 

8.에러 코드 매핑

Map<int, String> errorMessages = {
  404: '페이지를 찾을 수 없습니다.',
  500: '서버 오류가 발생했습니다.',
  403: '접근이 거부되었습니다.',
};

String getErrorMessage(int code) {
  return errorMessages[code] ?? '알 수 없는 오류가 발생했습니다.';
}

 

-Map의 유용한 메서드들

final Map<String, int> numbers = {'one': 1, 'two': 2, 'three': 3};

// 키/값 존재 확인
print(numbers.containsKey('one'));  // true
print(numbers.containsValue(4));    // false

// 모든 키/값 가져오기
print(numbers.keys);     // (one, two, three)
print(numbers.values);   // (1, 2, 3)

// 항목 추가/제거
numbers.addAll({'four': 4, 'five': 5});
numbers.remove('one');

// Map 변환
final doubled = numbers.map((key, value) => 
    MapEntry(key, value * 2));

// 조건부 삭제
numbers.removeWhere((key, value) => value > 2);

'Flutter' 카테고리의 다른 글

Flutter Method Channel  (0) 2024.12.04
Flutter SQLite 라이브러리 사용법  (0) 2024.12.03

댓글