F-Lab
🚀
상위권 IT회사 합격 이력서 무료로 모아보기

람다 함수와 함수형 프로그래밍의 이해

writer_thumbnail

F-Lab : 상위 1% 개발자들의 멘토링

AI가 제공하는 얕고 넓은 지식을 위한 짤막한 글입니다!



람다 함수의 개요

람다 함수는 함수형 프로그래밍에서 매우 유용하게 사용되는 개념입니다. 람다 함수는 이름 없는 함수를 간단히 표현할 수 있게 해줍니다. 예를 들어, 매개변수로 전달되는 함수를 간결하게 표현할 수 있고, 코드를 더욱 직관적으로 만들어주는 장점이 있습니다.

왜냐하면 람다는 수학적 표현을 컴퓨터 언어로 옮길 수 있게 보조해 주는 역할을 하기 때문입니다. 이게 컴퓨터 프로그래밍을 하는 사고의 기본이고, 수학적 표현을 컴퓨터 언어로 옮길 수 있게 보조해 주는 게 람다입니다.

람다 함수는 주로 자바스크립트나 파이썬에서 사용되며, 90년대에 이런 언어에만 있던 람다를 2011년도에 C++로 가져왔고, 람다 함수라는 이름으로 불리게 되었습니다.

C++에서는 런타임에 가까운 내용들을 클래스 펑터를 통해 구현했습니다. 펑터란 함수 객체를 의미합니다. 이게 오퍼레이터 오버로딩을 받아 함수처럼 호출할 수 있게 해줍니다.

클래스 펑터는 멤버 변수를 가질 수 있어서 캡처가 가능합니다. 캡처는 값이나 참조를 복사해서 멤버 변수에 넣는 걸 의미합니다. 이 클래스는 펑션 안에 변수로 들어가고, 베리어블이 사라지면 클래스가 정리됩니다. 참조로 가진 애들은 정리되고 복사한 애들은 멤버 변수로 살아있습니다.



함수형 프로그래밍의 기본 개념

함수형 프로그래밍은 수학적 함수 개념을 기반으로 하는 프로그래밍 패러다임입니다. 함수형 프로그래밍에서는 상태와 가변 데이터를 피하고, 순수 함수를 사용하여 프로그램을 구성합니다. 순수 함수는 동일한 입력에 대해 항상 동일한 출력을 반환하며, 부작용이 없습니다.

왜냐하면 함수형 프로그래밍은 상태와 가변 데이터를 피하고, 순수 함수를 사용하여 프로그램을 구성하기 때문입니다. 순수 함수는 동일한 입력에 대해 항상 동일한 출력을 반환하며, 부작용이 없습니다.

함수형 프로그래밍의 주요 개념 중 하나는 고차 함수입니다. 고차 함수는 다른 함수를 인자로 받거나, 함수를 반환하는 함수입니다. 예를 들어, 자바스크립트의 Array.prototype.map() 함수는 고차 함수입니다.

또한, 함수형 프로그래밍에서는 불변성을 중요시합니다. 불변성은 데이터가 변경되지 않음을 의미하며, 데이터의 변경이 필요할 때는 새로운 데이터를 생성합니다. 이는 프로그램의 예측 가능성을 높이고, 디버깅을 용이하게 합니다.

함수형 프로그래밍의 또 다른 중요한 개념은 커링입니다. 커링은 여러 개의 인자를 받는 함수를 인자 하나만 받는 함수들의 연속으로 변환하는 기술입니다. 이는 함수의 재사용성을 높이고, 코드의 가독성을 향상시킵니다.



람다 함수의 활용 예제

람다 함수는 다양한 프로그래밍 언어에서 활용될 수 있습니다. 예를 들어, 자바스크립트에서는 다음과 같이 람다 함수를 사용할 수 있습니다:

const add = (a, b) => a + b;
console.log(add(2, 3)); // 5

왜냐하면 람다 함수는 이름 없는 함수를 간단히 표현할 수 있게 해주기 때문입니다. 매개변수로 전달되는 함수를 간결하게 표현할 수 있고, 코드를 더욱 직관적으로 만들어주는 장점이 있습니다.

파이썬에서도 람다 함수를 사용할 수 있습니다:

add = lambda a, b: a + b
print(add(2, 3)) # 5

람다 함수는 주로 간단한 연산이나 일회성 함수 정의에 사용됩니다. 예를 들어, 리스트의 각 요소에 대해 특정 연산을 수행할 때 유용합니다:

numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x ** 2, numbers))
print(squared) # [1, 4, 9, 16, 25]

람다 함수는 코드의 가독성을 높이고, 간결하게 표현할 수 있는 장점이 있습니다. 그러나 복잡한 로직을 람다 함수로 구현하는 것은 피하는 것이 좋습니다.



람다 함수와 메모리 관리

람다 함수는 메모리 관리 측면에서도 중요한 고려사항이 있습니다. 람다 함수는 생성 방식에 따라 스택이나 힙 메모리를 사용할 수 있습니다. 무분별하게 사용하면 메모리 누수가 발생할 수 있습니다.

왜냐하면 람다 함수는 생성 방식에 따라 스택이나 힙 메모리를 사용할 수 있기 때문입니다. 무분별하게 사용하면 메모리 누수가 발생할 수 있습니다.

C++에서는 람다 함수가 클래스 펑터를 통해 구현되며, 캡처를 통해 값이나 참조를 복사하여 멤버 변수에 저장할 수 있습니다. 이는 메모리 사용을 효율적으로 관리할 수 있게 해줍니다.

람다 함수의 메모리 사용을 줄이는 방법 중 하나는 불필요한 캡처를 피하는 것입니다. 예를 들어, 다음과 같이 불필요한 캡처를 피할 수 있습니다:

int x = 10;
auto lambda = [x]() { return x + 1; }; // 불필요한 캡처
auto lambda = []() { return 10 + 1; }; // 불필요한 캡처 피함

람다 함수의 메모리 사용을 줄이는 또 다른 방법은 함수 객체를 명시적으로 관리하는 것입니다. 이는 메모리 사용을 효율적으로 관리할 수 있게 해줍니다.



결론

람다 함수와 함수형 프로그래밍은 현대 프로그래밍에서 매우 중요한 개념입니다. 람다 함수는 이름 없는 함수를 간단히 표현할 수 있게 해주며, 함수형 프로그래밍은 상태와 가변 데이터를 피하고, 순수 함수를 사용하여 프로그램을 구성합니다.

왜냐하면 람다 함수는 이름 없는 함수를 간단히 표현할 수 있게 해주며, 함수형 프로그래밍은 상태와 가변 데이터를 피하고, 순수 함수를 사용하여 프로그램을 구성하기 때문입니다.

람다 함수는 다양한 프로그래밍 언어에서 활용될 수 있으며, 코드의 가독성을 높이고, 간결하게 표현할 수 있는 장점이 있습니다. 그러나 복잡한 로직을 람다 함수로 구현하는 것은 피하는 것이 좋습니다.

람다 함수의 메모리 사용을 줄이는 방법 중 하나는 불필요한 캡처를 피하는 것입니다. 또한, 함수 객체를 명시적으로 관리하여 메모리 사용을 효율적으로 관리할 수 있습니다.

람다 함수와 함수형 프로그래밍을 이해하고 활용하면, 더 나은 코드 품질과 효율적인 메모리 관리를 할 수 있습니다. 이를 통해 더 나은 소프트웨어를 개발할 수 있습니다.

ⓒ F-Lab & Company

이 컨텐츠는 F-Lab의 고유 자산으로 상업적인 목적의 복사 및 배포를 금합니다.

조회수
logo
copyright © F-Lab & Company 2025