2026.01.06

박민재 (Daype)·2026년 1월 6일

구현목표 : 복잡해진 Switch 케이스 분리 / 팀프로젝트 구현중에 몬스터 종류가 늘어나면서, 클래스가 늘어났었는데 이를 해결하고자 enum class + switch 를 이용해 한 클래스에 여러 케이스가 존재하게끔 설계했다. 그러나 복잡한 작업은 줄어들었지만 그래도 반복되는 작업량이 많이지는 것을 보아서 만족할때까지 단축설계를 해보려한다.

예상구현완성 :

반복적으로 같은내용의 로그나 함수를 호출하는 중이지만 함수의 호출을 최소화하고 데이터 값덩어리로만 분류를 해주면 함수의 매개변수로 데이터값만 전달해준다면 여러케이스를 사용하지않고 의도한 방식대로 구현이 가능할거같다.

검색으로 찾아본 결과 함수포인터와 Map을 사용해서 Case를 정리하는 방법이 있다는 것을 찾을 수 있었는데 함수포인터란 변수에 주소가 존재하듯이 함수에도 주소가 존재 함수의 주소를 포인터로 변수화 시킨것을 함수포인터 라고한다는것을 알았다. Ex) 반환형 (*함수포인터변수이름)(매개변수) == int (*p)(int,int) 이런 형식이된다. 이러한 형태로 선언한 함수 포인터는 변수이름이 p가되고 p는 함수의 주소를 가지게된다. ex) int add(int a, int b) return a+b; 이 예제함수를 p에대입을하게되면 p(3,4) 이런식으로 호출이 가능하게 된다는 것이다.
추가로 함수포인터 또한 포인터이기때문에 매개변수로 받는것도 가능하다.

내가 구현하고싶었던것은 매개변수로 각자 다른 enum타입을 받아서 각 타입마다 다르게 동작하는 함수를 구현하고싶었는데 함수포인터와 map 을이용해서 클래스 내부에 구현을 하게 될 경우
클래스 내부 멤버함수는 객체가 생성된 상태로 호출이 가능해지기 때문에 한개의 클래스에 데이터가 전부 존재하는 나의 구조와는 맞지않았다. 이런경우 함수포인터가아니라 std::function 을 사용한다는 것을 튜터님을 통해 알게되었다.

std::function 의 내용이 너무 어려워서 다음에 다시 작성

0개의 댓글