버그 없는 프로그램을 만들기 위해 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문이 훨씬 읽기도 보기도 편하죠?

조건에 코드야이 작아서 그렇지 내용이 많아지면 차이가 더 많이 납니다.

읽기 편하고 보기 좋은 소스가 버그를 없애는데 유리합니다.