기억을 지배하는 기록

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

Flutter for Beginners

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

Andrew's Akashic Records 2025. 2. 21. 15:29
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
Comments