다트 함수(Dart Function Programming)란 무엇일까.

다트 언어에는 기본적으로 제공하는 수 많은 함수가 존재 합니다. 

우리는 이미 만들어져 있는 함수를 가져다가 원하는 개발을 하면 될 뿐 입니다. 

 

Iterable

  • Iterable은 리스트(List)와 Set(집합) 처럼 하나씩 순회 가능한 컬렉션의 공통 부모 타입.
  • Iterable은 인터페이스(추상 클래스).
  • 정리하면 Interable은 여러 데이터를 하나씩 순서대로 꺼내서 볼 수 있는 구조.
  • 아래 코드는 List, Set 데이터를 map 함수를 사용해서 Interable 형태로 변환함.
  • map 함수는 데이터를 하나씩 가져와서 처리.
void main() {
  List<String> listStudents = ['철수', '짱구', '맹구', '유리'];
  
  final listNewStudents = listStudents.map((x){
    return '1학년 1반 ${x}';
  });
  
  print(listStudents);
  print(listNewStudents);
  
  Set<String> setStudents = {'철수', '짱구', '맹구', '유리'};
  
  final setNewStudents = setStudents.map((x){
    return '1학년 1반 ${x}';
  });
  
  print(setStudents);
  print(setNewStudents);
}

Map 함수를 사용한 데이터 변경하기.

  • split('') 할 경우 문자열을 하나의 문자로 나누어 리스트 타입으로 만들어줌.
  • 리스트 상태의 데이터를 map 을 사용해서 Iterable 타입으로 변경과 동시에 데이터에 '등' 문자 데이터 추가.
  • 마지막으로 다시 리스트 타입으로 데이터 변환 후 출력.
void main() {
  String splitString = '12345';
  
  var result = splitString.split('').map((x) => '${x}등').toList();
  
  print(result);
}

 

  • Map 컬렉션 같은 경우 데이터가 key, value 두개이므로 각각 컨트롤 가능.
void main() {
  Map<String, String> player = {
    '토트넘' : '손흥민',
    '뭰헨' : '김민재', 
    '파리' : '이강인'
  };

  final result = player.map((key, value) => MapEntry('해외축구팀 ${key}','해외축구선수 ${value}'),);
  print(result);
  
  final kyes = player.keys.map((x) => '외국팀 ${x}');
  final values = player.values.map((x) => '외국선수 ${x}' );
  print(kyes);
  print(values); 
}

 

  • Set 컬렉션도 변경 가능함.
void main() {

  Set soccerPlayer = {
    '손흥민',
    '이강인',
    '김민재'
  };
  
  final mapSet = soccerPlayer.map((x) => '축구 선수 ${x}').toSet();
  print(mapSet);
  
}

 

where 함수

한 마디로 조건임.

void main() {

  List<Map<String, String>> soccerPlayer = [{
    'team' : '토트넘',
    'name' : '손흥민',
  },{
    'team' : '뭰헨',
    'name' : '김민재',
  },{
    'team' : '파리',
    'name' : '이강인',
  },
                                            
                                           ];
  
  final result = soccerPlayer.where((x) => x['team'] == '토트넘');
  print(soccerPlayer);
  print(result);
  
}

 

reduce 함수

리듀스는 다트 컬렉션에서 모든 요소를 누적하여 하나의 값으로 줄이는 함수.

처음 두개의 파라미터를 가지고 연산을 시작하고 그 결과를 다음 요소와 계속 연산.

결국에는 반복 하는 코드로 전 반복 연산값을 사용하는 특성상 무조건 리턴 값이 있어야함. 

void main() {
  List<int> numbers = [1, 2, 3, 4, 5, 6, 7];

  final result = numbers.reduce((prev, next) {
    print('------------');
    print('prev : ${prev}');
    print('next : ${next}');
    return prev + next;
  });
  print(result);
  
  final result = numbers.reduce((prev, next) => prev + next);
}

fold 함수

다트의 폴드 함수는 리스트의 모든 요소를 하나의 값으로 누적하는 함수.

리듀스와 유사하지만 초기값을 직접 지정할 수 있는게 차이.

아래 코드에서 모든게 똑같지만 시작 숫자가 10이라는 차이.

void main() {
  List<int> numbers = [1, 2, 3, 4, 5, 6, 7];

  final result = numbers.fold(10, (prev, next) {
    print('------------');
    print('reduce prev : ${prev}');
    print('reduce next : ${next}');
    return prev + next;
  });
  final result2 = numbers.reduce((prev, next) {
    print('------------');
    print('fold prev : ${prev}');
    print('fold next : ${next}');
    return prev + next;
  });

  print(result);
  print(result2);
}

 

cascading operator

List 병합할 때 사용.

first, second 리스트를 한번에 사용하고 싶을 때 유용.

void main() {
  List<int> first = [1, 2, 3, 4, 5];
  List<int> second = [11, 12, 13, 14, 15];

  print([first, second]);
  print([...first, ...second]);
}

 

컬렉션 데이터를 클래스로 변경

toString 함수는 객체를 문자열로 출력할 때 자동으로 호출.

void main() {
  List<Map<String, dynamic>> rawData = [
    {'name': '철수', 'grade': 1},
    {'name': '영희', 'grade': 2},
    {'name': '짱구', 'grade': 3},
  ];

  List<Student> students = rawData.map((data) {
    return Student(data['name'], data['grade']);
  }).toList();

  // print(students.map((s) => s.toString()).toList());
  print(students);
}

class Student {
  final String name;
  final int grade;

  Student(this.name, this.grade);

  @override
  String toString() => 'Student(name: $name, grade: $grade)';
}

 

'Dart' 카테고리의 다른 글

다트 스트림(Dart Stram)이란 무엇일까.  (0) 2025.07.16
다트 비동기 프로그래밍(Dart async Programming)란 무엇일까.  (0) 2025.07.15
다트 제네릭(Dart Generic)란 무엇일까.  (2) 2025.07.08
다트 인터페이스(Dart Interface)란 무엇일까.  (0) 2025.07.08
다트(Dart) 상속(inheritance)이란 무엇일까.  (0) 2025.07.07
'Dart' 카테고리의 다른 글
  • 다트 스트림(Dart Stram)이란 무엇일까.
  • 다트 비동기 프로그래밍(Dart async Programming)란 무엇일까.
  • 다트 제네릭(Dart Generic)란 무엇일까.
  • 다트 인터페이스(Dart Interface)란 무엇일까.
memoryman
memoryman
memoryman 님의 블로그 입니다.
  • memoryman
    MEMORYMAN STACK
    memoryman
  • 전체
    오늘
    어제
    • 분류 전체보기 (55)
      • Dart (11)
      • Python (2)
      • C# (1)
      • DB (5)
      • Algorithm (1)
      • Project (4)
      • IT (12)
      • .NET (7)
      • Flutter (12)
  • 블로그 메뉴

    • 프로필
    • 방명록
    • 메모장
    • 자소서
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    D
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
memoryman
다트 함수(Dart Function Programming)란 무엇일까.
상단으로

티스토리툴바