묻공러
[STL 사전지식] 3. 함수 객체
묻공러
묻지마공부
묻공러
전체
오늘
어제
  • 분류 전체보기 (521) N
    • C (54)
      • [코드조선] C 핵심 (35)
      • [언어본색] C 기초 (19)
    • C++ (72)
      • [루키스] C++ (9)
      • [루키스] 콜백함수 (6)
      • [루키스] STL (8)
      • [루키스] Modern C++ (11)
      • [노코프] C++ (10)
      • [노코프] Tips (16)
      • [일지] C++ (12)
    • C# (20) N
      • [루키스] C# (9)
      • [루키스] 자료구조 (3) N
      • [루키스] 실전 문법 (8) N
    • 자료구조 & 알고리즘 (50)
      • [코드조선] C 자료구조 & 알고리즘 (6)
      • [합격자되기] C++ 코딩테스트 (12)
      • [루키스] C++ 자료구조 & 알고리즘 (32)
    • CS (69)
      • [널널한 개발자] CS 개론 (19)
      • [혼자 공부하는] 컴퓨터 구조 (16)
      • [혼자 공부하는] 운영체제 (18)
      • [널널한 개발자] 네트워크 (16)
    • 게임 그래픽스 (46)
      • [전북대] OpenGL (25)
      • [일지] DirectX (21)
    • 게임 엔진 - 언리얼 (123)
      • [코드조선] 언리얼 (53)
      • [코드조선] 언리얼 데디서버 (8)
      • [일지] 언리얼 (59)
      • [일지] 언리얼 (2) (3)
    • 게임 엔진 - 유니티 (14) N
      • [최적화] 유니티 (4) N
      • [루키스] 유니티 (10) N
    • 게임 서버 (17)
    • 게임 수학 & 물리 (19)
      • 게임 수학 (12)
      • 게임 물리 (7)
    • GIT & GITHUB (4)
    • 영어 (18)
      • [The Outfit] 대본 공부 (11)
      • the others (7)
    • 그 외 (14)
      • In (5)
      • Out (5)
      • Review (4)

인기 글

최근 글

hELLO · Designed By 정상우.
C++/[루키스] 콜백함수

[STL 사전지식] 3. 함수 객체

2023. 1. 23. 11:47

이번 시간에는 함수 객체에 대해 알아보자

 

함수 객체 (Functor): 함수처럼 동작하는 객체

 

여기서 잠깐,

사실상 자주 쓰지도 않는 함수 포인터를 굳이 공부하고 함수 객체를 배워야 하는 이유가 무엇일까?

바로 함수 포인터의 단점을 보완한 것이 함수 객체이기 때문이다

그럼 함수 포인터의 장단점을 알아보자

 

함수 포인터의 장점은 무엇일까?

바로 동작을 넘겨줄 때 유용하다는 것이다

아래처럼 말이다

void Hello1(){}

int main()
{
	void (*pfunc)();
	pfunc = &Hello1;
	(*pfunc)();
}

 

그러면 함수 포인터의 단점은 무엇일까?

1) 시그니처가 안 맞으면 사용할 수 없다

void Hello1()
{

}
void Hello2(int number)
{

}

int main()
{
	void (*pfunc)();
	// pfunc = &Hello2; // 불가능하다
}

 

2) 상태를 가질 수 없다

함수의 주소를 담는 포인터 바구니이기에

결국, 멤버함수의 동작을 실행시켜 줄 뿐 상태를 가지지 못한다

 

이러한 단점을 극복하기 위해 등장한 것이 바로 함수 객체이다

 

함수 객체는 어떻게 만드는지 아래를 통해 알아보자

// 함수객체: "함수처럼 동작"
// 함수처럼 동작하기위해 () 연산자 오버로딩이 필요

class Functor
{
public:
    void operator()() // 인자를 받지않는 버전
    {

    }

    bool operator()(int num) // 인자를 받는 버전
    {
        _value += num;
        return _value;
    }
public:
    int _value = 0;
};

int main()
{
	Functor functor; // 상태 값을 들고 있으면서
    
	functor(); // 함수처럼 호출도 가능 (인자를 받지않는 버전)
	bool temp = functor(3); // (인자를 받는 버전)
}

 

함수 객체의 개념은

STL을 공부하면서 자주 사용할 예정이니 반드시 기억하도록 하자

 

그럼 끝내기 전에

MMO에서 함수 객체를 사용하는 예시를 잠깐 알아보자

 

클라와 서버가 실시간으로 계속 소통을 하는 상황이라면

서버는 클라가 보내준 네트워크 패킷을 받아서 처리를 하게 된다

하지만, 네트워크 패킷이 너무 많으면 중요한 우선순위에 따라 하나씩 실행해야 할 것이다

그럴 때, 아래와 같이 활용할 수 있다

class MoveTask
{
public:
    void operator()()
    {
        // 동작
    }
public:
    int _playerId;
    int _posX;
    int _posY;
};

int main()
{
	MoveTask task;
	task._playerId = 100;
	task._posX = 5;
	task._posY = 0;
    // 위처럼 함수 객체를 이용해 해야할 일을 만들어 놓고
    
    task();
    // 나중에 순서가 되면 혹은 여유가 될 때 일을 실행
}

 

위처럼 일감을 미리 만들어 놓고

필요할 때 그 동작을 수행하도록 만들 수 있다

이렇게 사용하는 방식을 커맨드 패턴이라고 부른다

저작자표시 비영리 변경금지 (새창열림)

'C++ > [루키스] 콜백함수' 카테고리의 다른 글

[STL 사전지식] 6. 콜백 함수  (0) 2023.01.25
[STL 사전지식] 5. 템플릿 기초 (2)  (0) 2023.01.25
[STL 사전지식] 4. 템플릿 기초 (1)  (0) 2023.01.25
[STL 사전지식] 2. 함수 포인터 (2)  (0) 2023.01.22
[STL 사전지식] 1. 함수 포인터 (1)  (0) 2023.01.22
'C++/[루키스] 콜백함수' 카테고리의 다른 글
  • [STL 사전지식] 5. 템플릿 기초 (2)
  • [STL 사전지식] 4. 템플릿 기초 (1)
  • [STL 사전지식] 2. 함수 포인터 (2)
  • [STL 사전지식] 1. 함수 포인터 (1)
묻공러
묻공러
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.