본문 바로가기
Flutter for Beginners

Dart의 함수(Function)와 람다(Lambda)

by Andrew's Akashic Records 2025. 2. 21.
728x90

Dart

Dart의 함수(Function)와 람다(Lambda)

Dart에서 함수는 코드의 재사용성을 높이고, 모듈화하여 유지보수를 쉽게 만드는 중요한 요소입니다.
또한 Dart는 람다(Lambda) 함수(= 화살표 함수) 를 지원하여 간결한 코드 작성을 도와줍니다.

1. 함수(Function) 기본 문법

1.1 함수 선언 및 호출

void sayHello() {
  print("Hello, Dart!");
}

void main() {
  sayHello(); // 함수 호출
}

- void는 반환값이 없을 때 사용됩니다.

1.2 매개변수가 있는 함수

void greet(String name) {
  print("Hello, $name!");
}

void main() {
  greet("Alice"); // Hello, Alice!
}

- 함수의 매개변수(parameter)를 통해 값을 전달할 수 있습니다.

1.3 반환값이 있는 함수

int add(int a, int b) {
  return a + b;
}

void main() {
  int result = add(3, 5);
  print(result); // 8
}

- return 키워드를 사용하여 값을 반환할 수 있습니다.

1.4 선택적 매개변수 (Optional Parameters)

Dart에서는 선택적 매개변수를 지원합니다.

 

1.4.1 대괄호 [ ] 사용 (선택적 매개변수)

void introduce(String name, [int? age]) {
  print("Name: $name");
  if (age != null) {
    print("Age: $age");
  }
}

void main() {
  introduce("Alice"); // Name: Alice
  introduce("Bob", 25); // Name: Bob, Age: 25
}

- 선택적 매개변수는 null을 허용하므로 int?로 선언해야 합니다.

 

1.4.2 중괄호 { } 사용 (명명된 매개변수)

void describe({String name = "Unknown", int age = 0}) {
  print("Name: $name, Age: $age");
}

void main() {
  describe(name: "Charlie", age: 30); // Name: Charlie, Age: 30
  describe(); // Name: Unknown, Age: 0
}

- {} 사용 시 매개변수를 명시적으로 전달해야 하며, 기본값을 설정할 수 있습니다.

 

1.4.3 required 키워드 사용 (필수 명명 매개변수)

void registerUser({required String username, required String email}) {
  print("Username: $username, Email: $email");
}

void main() {
  registerUser(username: "Alice", email: "alice@example.com");
  // registerUser(username: "Bob"); // 오류 (email이 필요함)
}

- required 키워드를 사용하면 반드시 값을 전달해야 합니다.

2. 익명 함수 (Anonymous Function)

익명 함수는 이름 없이 변수에 할당하여 사용할 수 있는 함수입니다.

void main() {
  var multiply = (int a, int b) {
    return a * b;
  };

  print(multiply(3, 4)); // 12
}

- 익명 함수는 var 변수에 할당하여 사용할 수 있습니다.

3. 람다(Lambda) 함수 (화살표 함수)

람다 함수는 간단한 함수 표현식을 한 줄로 작성할 때 유용합니다. 화살표(=>)를 사용하여 선언합니다.

3.1 기본 화살표 함수

int add(int a, int b) => a + b;

void main() {
  print(add(5, 3)); // 8
}

- { return ... } 대신 =>를 사용하여 간결하게 작성할 수 있습니다.

3.2 반환값이 없는 화살표 함수

void sayHi() => print("Hi, Dart!");

void main() {
  sayHi(); // Hi, Dart!
}

- void 함수에서도 화살표(=>)를 사용할 수 있습니다.

3.3 람다 함수를 매개변수로 전달

람다 함수를 다른 함수의 매개변수로 전달할 수 있습니다.

void executeFunction(Function fn) {
  fn();
}

void main() {
  executeFunction(() => print("Lambda 실행!"));
}

- 람다 함수는 콜백 함수로도 활용 가능합니다.

4. 고차 함수 (Higher-Order Function)

고차 함수는 다른 함수를 매개변수로 받거나 반환하는 함수를 의미합니다.

4.1 함수를 매개변수로 받기

void calculate(int a, int b, int Function(int, int) operation) {
  print(operation(a, b));
}

void main() {
  calculate(10, 5, (x, y) => x + y); // 15
  calculate(10, 5, (x, y) => x * y); // 50
}

- 매개변수로 전달된 함수를 실행하여 결과를 출력합니다.

4.2 함수를 반환하는 함수

Function getMultiplier(int factor) {
  return (int x) => x * factor;
}

void main() {
  var triple = getMultiplier(3);
  print(triple(10)); // 30
}

- getMultiplier(3)는 x * 3을 수행하는 함수를 반환합니다.

5. 재귀 함수 (Recursive Function)

재귀 함수는 자기 자신을 호출하는 함수입니다.
예제: 팩토리얼 계산

int factorial(int n) {
  if (n == 0) return 1;
  return n * factorial(n - 1);
}

void main() {
  print(factorial(5)); // 120
}

- factorial(5) → 5 * factorial(4) → 5 * 4 * factorial(3) …
- 재귀 호출이 너무 깊어지면 스택 오버플로우(Stack Overflow) 발생 가능

6. 클로저(Closure)

클로저는 함수가 외부 변수에 접근하고 유지할 수 있는 함수입니다.

Function makeCounter() {
  int count = 0;

  return () {
    count++;
    print(count);
  };
}

void main() {
  var counter = makeCounter();
  counter(); // 1
  counter(); // 2
  counter(); // 3
}

- count 변수는 makeCounter()가 실행된 후에도 유지됩니다.

7. 함수의 다양한 활용

7.1 리스트 map()과 where() 활용

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

  var squared = numbers.map((num) => num * num).toList();
  print(squared); // [1, 4, 9, 16, 25]

  var evenNumbers = numbers.where((num) => num % 2 == 0).toList();
  print(evenNumbers); // [2, 4]
}

- map(): 리스트의 각 요소를 변환
- where(): 특정 조건을 만족하는 요소만 필터링

개념 설명
함수 선언 void sayHello() { print("Hello"); }
익명 함수 var add = (int a, int b) { return a + b; };
람다 함수 int add(int a, int b) => a + b;
선택적 매개변수 [ ] 또는 { } 사용
고차 함수 함수가 매개변수 또는 반환값이 될 수 있음
재귀 함수 자기 자신을 호출하는 함수
클로저 함수가 외부 변수를 기억하는 기능

 

728x90

'Flutter for Beginners' 카테고리의 다른 글

Dart 화살표 함수  (0) 2025.02.21
Dart의 예외 처리  (0) 2025.02.21
Dart의 제어문  (0) 2025.02.20
Dart의 연산자  (0) 2025.02.20
Dart의 enum  (0) 2025.02.19