이번 시간에는 함수 객체에 대해 알아보도록 하겠습니다.
함수 객체란 ? 함수처럼 호출 가능한 클래스 객체입니다.
함수 객체는 함수처럼 사용할 수 있으면서도 상태를 가질 수 있기 때문에 STL은 함수보다 함수 객체를 선호합니다.
함수 객체를 함수처럼 동작하게 하려면 '()'연사자를 정의해야 합니다. 다시말해 '()'연사자를 오버로딩한 객체입니다.
간단한 예제를 통해 이해해 보도록 하겠습니다.
functor는 객체지만 함수처럼 호출할 수 있습니다.
그렇다면 일반함수보다 복잡해 보이는 함수 객체를 사용하는 이유가 무엇일가요?
그이유는 이렇습니다.
먼저 함수처럼 동작하는 객체이므로 다른 멤버 변수와 멤버 함수를 가질 수 있고 일반 함수에서 하지 못하는 지원을 받을 수 있습니다.
또한, 함수 객체의 서명이 같더라도 타입이 다르면 서로 전혀 다른 타입으로 인식합니다. 속도도 일반 함수보다 함수 객체가 빠릅니다.
함수의 주소를 전달하여 콜백하는 경우 이 함수 포인터는 인라인될 수 없지만 함수 객체는 인라인될 수 있고, 컴파일가 쉽게 최적화할 수 있습니다.
이와같은 장점 때문에 함수 객체를 사용하게됩니다.
간단한 예제를 통해 함수 객체의 장점을 보겠습니다.
여기서 operator()(int n)함수는 클래스 내부에 정의되므로 암묵적으로 인라인 함수가 됩니다.
함수 객체에 대하여 이해가 가셨나요?
그렇다면 지금부터 함수 객체를 구현해보도록 하겠습니다.
첫번째로 less( < 연사자의 함수객체 )를 구현해보도록 하겠습니다.
Pred_less()함수는 두 정수를 입력받아 < 연산의 결과를 반환합니다.
1()은 함수객체로 두 정수를 입력받아 l.operator()()을 호출하고 결과를 반환합니다.
결과는 어떻게 될까요?
@
생각하신 결과가 맞으신가요? ㅎㅎ
greater( >연산자의 함수 객체)는 위의 less함수객체를 조금만 변형시키면 됩니다. 직접해보시기 바랍니다~^^
함수 객체의 포스팅은 여기서 마치도록하겠습니다.
다음시간에는 템플릿에 대해 알아보도록 하겠습니다.
<작성자 - CODER_CJH>
<참고자료 - 뇌를 자극하는 C++STL>
'Programming Language > C++' 카테고리의 다른 글
7. vector 컨테이너(1) (0) | 2016.06.03 |
---|---|
6. 템플릿 (0) | 2016.06.01 |
4. 함수 포인터 (1) | 2016.06.01 |
3. STL에 필요한 주요 연산자 오버로딩(2) (4) | 2016.06.01 |
2. 연산자오버로딩(1) (0) | 2016.06.01 |