강좌 & 팁
버그 없는 프로그램을 만들기 위해 if문 대신에 switch문을 사용하는 것이 좋습니다.
예를 들어 아래와 같은 if문이 있습니다.
int sw = 0;
sw = get_sw();
if ( SW_READY == sw){
printf( "시스템 대기 상태입니다.\n");
} else if ( SW_GET_DATA == sw){
printf( "데이터 수신 중입니다..\n");
} else if ( SW_WAIT_RESPONSE == sw){
printf( "응답 대기 중입니다.\n");
} else {
printf( "인증 안 된 코드 반환\n");
}
switch문으로 변경하면 아래와 같습니다.
switch( get_sw()){
case SW_READY :
printf( "시스템 대기 상태입니다.\n");break;
case SW_GET_DATA:
printf( "데이터 수신 중입니다..\n");
break;
case SW_WAIT_RESPONSE:
printf( "응답 대기 중입니다.\n");
break;
default :printf( "인증 안 된 코드 반환\n");
break;
}
어떻습니까? 조금 더 읽기 편하지 않습니까? 별로라고요? 그럼 if문 안에 if 문은 어떨까요?
int sw = 0;
int rst = 0;
sw = get_sw();
if ( SW_READY == sw){
printf( "시스템 대기 상태입니다.\n");
rst = call_ready_fun();
if ( SYS_READY_OK == rst){
printf( "시스템 대기 OK.\n");
} else ( SYS_READY_FAILURE == rst){
printf( "시스템 대기 실패.\n");
} else {
printf( "시스템 대기 함수의 인증 안 된 코드 반환\n");
}
} else if ( SW_GET_DATA == sw){
printf( "데이터 수신 중입니다..\n");
} else if ( SW_WAIT_RESPONSE == sw){
printf( "응답 대기 중입니다.\n");
} else {
printf( "인증 안 된 코드 반환\n");
}
그러나 switch문으로 바뀌면 아래와 같습니다.
switch( get_sw()){
case SW_READY :
printf( "시스템 대기 상태입니다.\n");
switch( call_ready_fun()){
case SYS_READY_OK :
printf( "시스템 대기 OK.\n");
break;
case SYS_READY_FAILURE:
printf( "시스템 대기 실패.\n");
break;
defult:
printf( "시스템 대기 함수의 인증 안 된 코드 반환\n");
break;
}
break;
case SW_GET_DATA:
printf( "데이터 수신 중입니다..\n");
break;
case SW_WAIT_RESPONSE:
printf( "응답 대기 중입니다.\n");
break;
default :printf( "인증 안 된 코드 반환\n");
break;
}
어떻습니까? 확실히 if문 보다 switch문이 훨씬 읽기도 보기도 편하죠?
조건에 코드야이 작아서 그렇지 내용이 많아지면 차이가 더 많이 납니다.
읽기 편하고 보기 좋은 소스가 버그를 없애는데 유리합니다.