[c++] 함수 객체 (Function object)

함수 객체는 함수처럼 동작하는 객체로, 함수 호출 연산자 ()를 오버로드하여 호출될 수 있다. 이를 통해 함수처럼 동작하면서도 객체지향 프로그래밍의 장점을 살릴 수 있다.

함수 객체의 장점

  1. 유연성

    함수 객체는 상태를 유지할 수 있어서 반복 호출 사이에 상태를 유지하거나 공유할 수 있다.

  2. 인라인 최적화

    컴파일러는 함수 객체를 인라인하여 호출 오버헤드를 최소화할 수 있다.

  3. 다형성

    다양한 타입의 함수 객체를 사용하여 다형성을 구현할 수 있다.

예시

#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++에서 유용한 개념으로, 객체지향 프로그래밍과 함수형 프로그래밍을 융합하는데 중요한 역할을 한다. 함수 객체의 장점을 활용하여 코드를 보다 효율적으로 작성할 수 있다.

참고 문헌