본문 바로가기
Flutter & Dart

Flutter & Dart - Lambda

by 방정맞은사람 2025. 1. 8.

람다 함수는 익명 함수로, 이름 없이 간단한 형태로 작성되는 함수입니다. 함수의 형식이 간단하고 특정한 기능을 짧은 코드로 구현할 수 있기 때문에 자주 사용됩니다. 주로 간결한 코드와 고차 함수를 다룰 때 유용하게 사용됩니다.

1. 람다의 특징

  • 익명 함수: 람다 함수는 이름이 없는 함수입니다. 그 대신 변수에 할당하거나 다른 함수의 매개변수로 전달할 수 있습니다. 람다 함수는 코드가 짧고, 직접적으로 표현해야 할 때 유용합니다.
    (a, b) => a + b
    
    위 예시에서 (a, b) => a + b는 "a"와 "b"를 받아 더하는 함수입니다. 이름이 없는 이 함수는 직접적으로 계산만 수행하고, 이름은 필요 없습니다.
  • 예:
  • 함수: 람다는 객체가 아니라 함수로 취급됩니다. 즉, 람다는 클래스에 종속되지 않고 독립적으로 사용할 수 있습니다.
    (a) => (b) => a + b 는 a와 b를 받아 더하는 함수입니다.
    
    이 람다 함수는 두 번째 매개변수 "b"를 받는 함수를 반환하는 형태로 구성됩니다.
  • 예:
  • 고차 함수: 람다는 다른 함수의 매개변수로 전달되거나, 다른 함수의 반환 값으로 사용될 수 있습니다.
    (a) => (b) => a + b 에서 첫 번째 함수는 b를 받는 함수를 반환합니다.
    
    람다는 함수형 프로그래밍에서 고차 함수와 함께 사용됩니다. 고차 함수는 다른 함수를 인수로 받거나, 함수를 반환하는 함수입니다.
  • 예:
  • 간결성: 람다 함수는 복잡한 로직을 짧고 직관적으로 표현할 수 있게 해줍니다. 여러 줄로 작성해야 할 함수를 한 줄로 표현할 수 있습니다.
    (a, b) => a + b
    
  • 예:

2. 람다의 예시

  • 기본 람다람다 함수 (a, b) => a + b는 a와 b를 더하는 간단한 함수입니다. 이 함수는 add라는 변수에 할당되며, 이후 add(2, 3)을 호출하여 결과를 출력할 수 있습니다.
  • final add = (a, b) => a + b; print(add(2, 3)); // 출력: 5
  • 고차 함수와 람다addT는 커링(curring) 방식의 람다 함수입니다. 첫 번째 호출에서 "a" 값을 받고, 두 번째 호출에서 "b" 값을 받습니다. addT2 = addT(2)는 a = 2인 함수를 반환합니다. addT2(3)은 2 + 3 = 5를 계산합니다.
  • final addT = (a) => (b) => a + b; final addT2 = addT(2); print(addT2(3)); // 출력: 5

3. 람다의 활용

  • 1급 객체: 람다는 1급 객체로서 변수에 할당하거나 다른 함수의 매개변수로 전달할 수 있습니다. 함수는 데이터처럼 취급되며, 이를 통해 더 유연하고 모듈화된 코드를 작성할 수 있습니다.
    final addT = (a) => (b) => a + b;
    final addT2 = addT(2);
    print(addT2(3));  // 5
    
  • 예:
  • 커링(Currying): 람다는 커링(Currying) 기법에 사용될 수 있습니다. 커링은 여러 개의 매개변수를 여러 번의 함수 호출로 나누어 받는 기법입니다. 이를 통해 더 간결한 함수 작성이 가능합니다.
    final addT = (a) => (b) => a + b;
    print(addT(2)(3));  // 5
    
    커링을 사용하면 한 번에 매개변수 하나씩 처리할 수 있습니다. 위 예시는 addT(2)(3)을 사용하여 두 숫자를 더하는 함수입니다.
  • 예:
  • 함수형 프로그래밍의 기법: 람다는 함수형 프로그래밍의 기법 중 하나로, 불변성과 순수 함수와 잘 어울립니다. 이를 통해 함수들을 조합하거나 고차 함수를 만들어 모듈화된 코드를 작성할 수 있습니다.

4. 람다와 클로저(Closure)

람다는 클로저를 생성할 수 있습니다. 클로저는 함수가 자신의 외부 환경을 기억하여 외부 변수에 접근하는 기능입니다. 이를 통해 함수가 외부 상태를 참조하거나 변경할 수 있습니다.

예:

final addT = (a) => (b) => a + b;
final addT2 = addT(2);  // addT(2)에서 'a' 값을 기억
print(addT2(3));        // 2 + 3 = 5

addT2는 addT(2)에서 a = 2를 기억하고, addT2(3)에서 b = 3을 받아 2 + 3 = 5를 계산합니다. 이처럼 람다 함수는 외부 변수에 대한 상태를 유지하면서 실행할 수 있습니다.

5. 람다의 장점

  • 코드 간결성: 람다 함수는 짧고 간결하게 코드를 작성할 수 있게 해줍니다. 복잡한 로직을 여러 줄로 구현하는 대신, 한 줄로 해결할 수 있습니다.
  • 고차 함수와 함께 사용: 람다는 고차 함수와 잘 어울리며, 함수의 인수나 반환값으로 사용할 수 있어 유연한 코드를 작성할 수 있습니다.
  • 클로저를 통한 상태 유지: 람다는 클로저로 사용되어 상태를 유지하거나 외부 변수를 기억하면서 동작할 수 있습니다.

결론

람다 함수는 익명 함수, 고차 함수, 함수형 프로그래밍 등에서 중요한 개념으로 활용됩니다. 람다 함수는 간결한 코드 작성뿐만 아니라 클로저와 커링 기법을 활용하여 더 유연하고 효율적인 코드를 만들 수 있는 강력한 도구입니다.