✅ 목표 (Goal)

switch-case가 좋은가? 함수 포인터가 좋은가?

✅ 샘플 코드

    while (1) {
        if (key_hit() == true) {
            key_code = key_read();
            //key_print(key_code);
            switch (key_code) {
            case KEY_UP:
                //printf("Up\\n");
                arcade_machine.control_panel.buttons[ID_STICK_UP].pressed = true;
                arcade_machine.control_panel.buttons[ID_STICK_UP].callback();
                arcade_machine.control_panel.buttons[ID_STICK_UP].pressed = false;
                break;

            case KEY_DOWN:
                //printf("Down\\n");
                arcade_machine.control_panel.buttons[ID_STICK_DOWN].pressed = true;
                arcade_machine.control_panel.buttons[ID_STICK_DOWN].callback();
                arcade_machine.control_panel.buttons[ID_STICK_DOWN].pressed = false;
                break;

            case KEY_LEFT:
                //printf("Left\\n");
                arcade_machine.control_panel.buttons[ID_STICK_LEFT].pressed = true;
                arcade_machine.control_panel.buttons[ID_STICK_LEFT].callback();
                arcade_machine.control_panel.buttons[ID_STICK_LEFT].pressed = false;
                break;

            case KEY_RIGHT:
                //printf("Right\\n");
                arcade_machine.control_panel.buttons[ID_STICK_RIGHT].pressed = true;
                arcade_machine.control_panel.buttons[ID_STICK_RIGHT].callback();
                arcade_machine.control_panel.buttons[ID_STICK_RIGHT].pressed = false;
                break;

            case KEY_SPACE:
                //printf("Fire !!\\n");
                arcade_machine.control_panel.buttons[ID_BUTTON_01].pressed = true;
                arcade_machine.control_panel.buttons[ID_BUTTON_01].callback();
                arcade_machine.control_panel.buttons[ID_BUTTON_01].pressed = false;
                break;

            case KEY_c:
                printf("Coin\\n");
                break;
            }
        }
    }

✅ switch-case 방식

장점 간단하고 직관적이며, 소규모 프로젝트에서는 충분히 효과적.

각 키 입력에 대해 명시적으로 처리할 수 있어 디버깅이 쉬움.

단점 키 입력 종류가 늘어나면 switch-case가 길어지고 복잡해짐.

새로운 키 입력을 추가하거나 기존 동작을 수정할 때 반복적인 코드 작성이 필요.

중복된 코드(pressed = true, callback(), pressed = false)가 많아 유지보수가 어려워질 수 있음.

✅ 함수 포인터 배열 방식

장점

키 입력과 동작을 매핑하는 로직이 간결해짐.

새로운 키 입력을 추가하거나 수정할 때 함수 포인터 배열만 업데이트하면 됨.

중복된 코드를 제거하여 유지보수가 쉬워짐.

확장성과 가독성이 높아짐.