함수형 프로그래밍은 "함수"를 일급 객체로 취급하는 프로그래밍 패러다임 중 하나입니다. 일급 객체란 변수에 할당할 수 있고, 다른 함수의 인자로 전달하거나 반환값으로 사용할 수 있는 객체를 의미합니다. Dart는 이러한 함수형 프로그래밍의 개념을 지원하여, 함수를 변수에 할당하고, 다른 함수의 인자로 전달하며, 함수에서 다른 함수를 반환할 수 있게 합니다.
Dart에서 함수를 하나의 변수처럼 다루는 방법을 살펴보겠습니다. 다음 예제는 함수를 변수에 할당하고, 이를 호출하는 간단한 방법을 보여줍니다.
이 예제에서 disMsg 함수는 void disMsg()로 정의되어 있고, main 함수 내에서 Function 타입의 변수 f1에 할당되었습니다. 이후 f1()을 호출함으로써, disMsg 함수가 실행되고 "어서오세요."라는 메시지를 출력합니다.
void main() {
Function f1 = disMsg;
int x = 10;
String name = "홍길동";
print(x);
print(name);
f1();
}
void disMsg() {
print('어서오세요.');
}
일급 함수의 사용: Dart에서 함수는 일급 객체이므로, 다른 함수에 인자로 전달하거나, 함수에서 함수를 반환할 수 있습니다. 이는 고차 함수를 구현할 때 유용합니다.
불변성(Immutability): 함수형 프로그래밍에서는 데이터의 불변성을 중시합니다. Dart에서는 final 또는 const를 사용하여 불변성을 확보할 수 있습니다.
익명 함수(Anonymous functions): Dart는 이름이 없는 함수, 즉 익명 함수의 선언을 지원합니다. 이를 통해 코드를 더 간결하게 만들 수 있습니다.
아래 예시 코드는 Dart 언어에서 List 컬렉션과 forEach 메소드를 사용하여 각 항목을 순회하고 출력하는 예제입니다. 코드를 단계별로 분석해보겠습니다.
list.forEach((item) {
print('${list.indexOf(item)}: $item');
});