자료구조와 알고리즘/Data Structure

[게임 프로그래머 입문 올인원] 함수 객체 (64강)

순정법사 2024.02.19

B. 함수 객체

1. 함수 객체의 기본

a. 함수 객체란?

🌟 함수처럼 작동하는 객체

 

  • 함수처럼 호출될 수 있고, 상태를 유지할 수 있음
  • 주로 함수 포인터의 한계를 극복하거나 유연한 동작을 제공하기 위해 사용
  • c++에서 자주 사용

 

b. 함수 객체의 구조

구조는 일반 클래스나 스트럭트의 구조와 다를게 없음

 

⏳ 함수 객체의 간단한 예제

#include <iostream>

// 함수 객체 클래스 정의
class MyFunctionObject {
public:
    // 호출 연산자 정의
    void operator()(int x) const {
        std::cout << "함수 객체가 호출되었습니다. 인자: " << x << std::endl;
    }
};

int main() {
    // 함수 객체 생성
    MyFunctionObject func;

    // 함수 객체 호출
    func(42);

    return 0;
}

 

즉, 아래 클래스와 비슷하게

 

ㅁfunctor의 멤버함수 addvalue

 

클래스의 멤버 함수를 호출하는 것이랑 다를게 없음

 

👉 즉, operator()의 호출 연산자로 오버로딩해 새롭게 만들어주는 것 

 

이런 느낌

 

c. 함수 객체의 주요 이점

1) 상태 유지

 

클래스의 멤버 변수를 통해 상태를 유지

함수 포인터로는 구현하기 어려운 상태를 가진 함수를 쉽게 표현할 수 있게 함

 

2) 다형성

 

클래스의 다형성을 활용할 수 있음상속과 가상함수를 통해 다양한 동작을 제공

 

3) 캡슐화

 

관련된 동작과 상태를 하나의 단위로 묶을 수 있음이는 코드의 가독성과 유지보수성을 향상시킴

 

4) 유연한 동작

 

함수 객체는 포인터와 달리 연산자를 통해 다양한 동작을 제공할 수 있음

 

d. 템플릿과 함수객체

템플릿과 함수 객체는 궁합이 잘 맞는다!

 

예를 들어서

현재 FuncType은 int로 지정되어 있는 함수 포인터이지만,

 

 

템플릿을 사용해서 바꿔주면 이렇게 간편하게 사용할 수 있다

 

👉 즉, 펑터를 만들어주고

그 펑터를 사용할 때 사용되는 함수는

템플릿 문법과 굉장히 잘 맞는다

 

e. less / greater

결국 우리가 함수 포인터와 객체를 공부한 이유는

less, greater를 이해하기 위해서 였음

 

표준에서 사용하는 코드 (만들어줘도 됨)

 

💙 총정리

* 함수 포인터는 동작만 있는 것
* 함수 객체는 동작 + 데이터를 바인딩해 관리하는 것

두개를 적절히 유동적으로 사용하면 됨!

 

 

2. MMO 예제 

a. 실행 예제

1) 클라 ➡ 서버 : 좌표로 이동해줘

 

 

2) 움직임 함수 객체 생성

 

x, y 데이터 저장

 

👉 위와같이 함수 객체는 데이터와 행동을 저장

 

3) 움직임 실행

job은 Queue를 사용해 관리하면 됨

 

행위마다 클래스를 만드는게 부담스러우면 람다식을 이용

 

💙 다형성

최상위 클래스를 만들고 상속하면 다양한 행위들을 컨트롤 할 수 있음  

꼭 소멸자 가상함수 챙겨주고

 

이와 같이 사용!

 

 

 


출처 : https://www.inflearn.com/course/%EA%B2%8C%EC%9E%84-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8-%EC%9E%85%EB%AC%B8-%EC%98%AC%EC%9D%B8%EC%9B%90-rookiss#curriculum

 

[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버 -

어디부터 시작할지 막막한 게임 프로그래밍 입문자를 위한 All-In-One 커리큘럼입니다. C++, 자료구조/알고리즘, STL, 게임 수학, Windows API, 게임 서버 입문으로 이어지는 알찬 커리큘럼으로 게임 프

www.inflearn.com