[c++] 함수 객체 (Function object)
함수 객체는 함수처럼 동작하는 객체로, 함수 호출 연산자 ()
를 오버로드하여 호출될 수 있다. 이를 통해 함수처럼 동작하면서도 객체지향 프로그래밍의 장점을 살릴 수 있다.
함수 객체의 장점
-
유연성
함수 객체는 상태를 유지할 수 있어서 반복 호출 사이에 상태를 유지하거나 공유할 수 있다.
-
인라인 최적화
컴파일러는 함수 객체를 인라인하여 호출 오버헤드를 최소화할 수 있다.
-
다형성
다양한 타입의 함수 객체를 사용하여 다형성을 구현할 수 있다.
예시
#include <iostream>
#include <algorithm>
class MultiplyBy {
private:
int factor;
public:
MultiplyBy(int factor) : factor(factor) {}
int operator()(int value) const {
return value * factor;
}
};
int main() {
MultiplyBy multiplyByTwo(2);
std::cout << multiplyByTwo(5) << std::endl; // 출력: 10
std::vector<int> numbers = {1, 2, 3, 4, 5};
std::transform(numbers.begin(), numbers.end(), numbers.begin(), MultiplyBy(3));
// numbers: {3, 6, 9, 12, 15}
}
위 예시에서 MultiplyBy
클래스는 함수 객체로, operator()
를 오버로드하여 int
값을 곱하는 동작을 수행한다.
함수 객체를 사용하면 코드의 가독성과 재사용성을 높일 수 있다. 특히 알고리즘과 함께 사용할 때 이점이 더욱 부각된다.
마무리
함수 객체는 C++에서 유용한 개념으로, 객체지향 프로그래밍과 함수형 프로그래밍을 융합하는데 중요한 역할을 한다. 함수 객체의 장점을 활용하여 코드를 보다 효율적으로 작성할 수 있다.