Skip to content

lambda expression {C++} TODO


정의#

람다는 클로저입니다. 스코프 안에 있는 변수들을 캡쳐할 수 있는 이름없는 함수 오브젝트입니다.

[captures] (params) {body}
  • captures: 람다함수 정의부의 스코프에 있는 변수를 '캡쳐'하여 body 안에서 사용할 수 있음.
    • identifiers:
      • &: 스코프의 모든 변수의 레퍼런스를 캡쳐함
      • = : 스코프의 모든 변수의 값을 캡쳐함

코딩 스탠다드 람다#

람다 함수에 대한 코딩 스탠다드에 대해 설명하는 영상입니다. 영상에서는 C++과 C#에서의 람다 사용에 대해 비교하며, 람다의 장단점을 다루고 있습니다. C++에서는 람다 사용을 최대한 피하고, 단순하고 재사용성이 없는 경우에만 사용할 것을 권장하고 있습니다. 반면, C#에서는 람다 사용이 더 자유롭고 읽기 쉽지만, 체이닝이 복잡해지거나 중복된 코드가 나타날 수 있다는 점을 주의해야 합니다. 코드의 복잡성에 따라 적절하게 람다를 사용하고, 중간중간 변수 이름을 사용하여 가독성을 높이는 것이 좋습니다.

  • 한 번만 쓰는 함수를 없게 하라 => 람다의 옳게 된 의미
  • 람다의 단점
    • 람다 함수는 함수 내부에 코드를 넣는 방식이기 때문에 디버깅 시 함수 이름이 나타나지 않고, 여러 개의 람다 함수를 사용할 때 코드 분석이 어렵다.
    • 또한, 처음에는 람다 함수를 다른 곳에서 사용하지 않을 것으로 가정하고 코드를 작성하지만, 나중에는 써야 할 상황이 생겨 코드의 재사용성이 떨어지는 경우가 있다.
    • 람다를 적극적으로 사용하다 보면 동일한 작업을 하는 중복 코드가 많아진다.
    • 또한, 현재의 툴들은 람다 디버깅을 제대로 지원하지 않는 경우가 있으며, 템플릿 프로그래밍처럼 디버거에 브레이크 포인트를 걸기 어려웠던 시기가 있었으나 최근에는 개선되어 템플릿 함수에만 브레이크 포인트를 걸 수 있도록 된 것과 비슷하게 툴이 발전되고 있다.
  • 그럼 언제 쓰냐?
    • 코드가 한/두줄일 경우에 해당, 긴 함수는 private 함수로 만드는 것이 좋다.