-
함수객체란? 일반함수와의 장단점@ 16. 1 ~ 17. 1/면접관련 2017. 1. 4. 22:47
[C++] 함수객체 기본 예제
함수 객체(Function Object)는 함수처럼 동작하는 객체이다.
함수처럼 동작하려면 객체가 operator() 를 정의해야 한다.
아래의 예제를 보면 구조체에서 operator() 연산자를 오버라이딩 하고, main에서 해당 구조체를 선언한 후 함수처럼 호출하였다.
* 함수 객체의 장점
함수 객체는 함수처럼 동작하는 객체이므로 다른 멤버 변수와 멤버 함수를 가질 수 있고 일반 함수에서 하지 못하는 지원을 받을 수 있다.
또한, 함수 객체의 서명이 같더라도 객체 타입이 다르면 서로 전혀 다른 타입으로 인식한다.
속도도 일반 함수보다 함수 객체가 빠르다. 함수의 주소를 전달하여 콜백할 경우 이 함수 포인터는 인라인 될 수 없지만 (함수 포인터는 함수가 있어야 하므로 인라인 함수의 복사본 함수를 만들어 낸다.) 함수 객체는 인라인 될 수 있고, 컴파일러가 쉽게 최적화 할 수 있다.
특정상황에서 함수객체는 함수보다 빠름
: 임의 함수를 다른 함수에 인자로 전달한 후 사용할 때 일반함수는 인라인화 될 수 없지만, 객체는 인라인화 될 수 있다.
C++의 functor는 기존에 함수보다 다소 복잡하게 정의되고 또 쓰는 방법도 이상한데 왜 이것을 쓰는 것인가?
functor는 다음 3가지 장점이 있다.
1. 함수 객체는 내부 변수를 가질 수 있다. 사용자가 함수 객체를 사용하면서 다른 상태를 가질 수 있다.
2. 함수 객체는 자신만의 타입을 가질 수 있다. 이를 이용해서 각각 다른 함수-객체를 갖는 컨테이너를 만들 수 있다.
3. 속도가 빠르다. 함수가 inline으로 사용할 수 없는 곳에 함수 객체를 inline으로 사용할 수 있다.'@ 16. 1 ~ 17. 1 > 면접관련' 카테고리의 다른 글
컴파일과정 정리 / cpp와 h를 나누는 이유? (1) 2017.01.04 rand()함수보완 및 클래스 메서드와 데이터 멤버에 대한 포인터?? (0) 2017.01.04 STL 컨테이너 정리 (0) 2017.01.04 C++ 캐스팅 종류 (0) 2017.01.04 L벨류 R벨류 정리 (0) 2017.01.04