ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 함수객체란? 일반함수와의 장단점
    @ 16. 1 ~ 17. 1/면접관련 2017. 1. 4. 22:47

    [C++] 함수객체 기본 예제


    함수 객체(Function Object)는 함수처럼 동작하는 객체이다.

    함수처럼 동작하려면 객체가 operator() 를 정의해야 한다.


    아래의 예제를 보면 구조체에서 operator() 연산자를 오버라이딩 하고, main에서 해당 구조체를 선언한 후 함수처럼 호출하였다.


    * 함수 객체의 장점


    함수 객체는 함수처럼 동작하는 객체이므로 다른 멤버 변수와 멤버 함수를 가질 수 있고 일반 함수에서 하지 못하는 지원을 받을 수 있다.

    또한, 함수 객체의 서명이 같더라도 객체 타입이 다르면 서로 전혀 다른 타입으로 인식한다.

    속도도 일반 함수보다 함수 객체가 빠르다. 함수의 주소를 전달하여 콜백할 경우 이 함수 포인터는 인라인 될 수 없지만 (함수 포인터는 함수가 있어야 하므로 인라인 함수의 복사본 함수를 만들어 낸다.) 함수 객체는 인라인 될 수 있고, 컴파일러가 쉽게 최적화 할 수 있다.


    특정상황에서 함수객체는 함수보다 빠름

     : 임의 함수를 다른 함수에 인자로 전달한 후 사용할 때 일반함수는 인라인화 될 수 없지만, 객체는 인라인화 될 수 있다.





    C++의 functor는 기존에 함수보다 다소 복잡하게 정의되고 또 쓰는 방법도 이상한데 왜 이것을 쓰는 것인가?
    functor는 다음 3가지 장점이 있다. 
    1. 함수 객체는 내부 변수를 가질 수 있다. 사용자가 함수 객체를 사용하면서 다른 상태를 가질 수 있다. 
    2. 함수 객체는 자신만의 타입을 가질 수 있다. 이를 이용해서 각각 다른 함수-객체를 갖는 컨테이너를 만들 수 있다.
    3. 속도가 빠르다. 함수가 inline으로 사용할 수 없는 곳에 함수 객체를 inline으로 사용할 수 있다.


Designed by Tistory.