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가 길어지고 복잡해짐.
새로운 키 입력을 추가하거나 기존 동작을 수정할 때 반복적인 코드 작성이 필요.
중복된 코드(pressed = true, callback(), pressed = false)가 많아 유지보수가 어려워질 수 있음.
장점
키 입력과 동작을 매핑하는 로직이 간결해짐.
새로운 키 입력을 추가하거나 수정할 때 함수 포인터 배열만 업데이트하면 됨.
중복된 코드를 제거하여 유지보수가 쉬워짐.
확장성과 가독성이 높아짐.