몇주 전에 소스 코드를 효율적으로 짜는 내용과 관련된 책(Effective 시리즈는 아니다)에서 'if 문을 사용하는 것은 비효율적이다.' 라고 주장하는 것을 보게 되었습니다. 그리고 종종 'switch case를 사용하는 경우는 위험하다.' 라고 이야기를 하는 경우도 보게 됩니다.

이런 이야기를 할 주제가 되지 않는 다는 것은 알지만, 두가지 의견에 대해서 모두 다 '이건 무슨 되도않는 이야기인가?' 하는 생각을 하고는 합니다.


우선 if문이 switch case보다 비효율적이다고 소개를 한 내용의 샘플 소스 코드는 아래와 같았습니다.





물론 정확하게 동일한 소스는 아닙니다만 논지는 같았습니다.
매번 if문을 들어가서 검사를 하기 때문에 비효율적이다. 라고 이야기를 하는 것입니다.
예를 들어 위의 경우 만약 첫번째 if가 해당이 되더라도 바로 빠져나오지 못하고 아래의 값들도 검사를 하게 됩니다.

하지만 이런 의견은 정말이지 그냥 switch case를 띄워보기 위해서 어거지로 짠 것이나 다름이 없지 않은가? 하는 생각을 하게 됩니다.

사실 아래의 경우처럼 else if 처리를 하면 그런 일이 없기 때문입니다.



모두 break point를 잡아놓고 돌려보도록 합시다. 가장 처음에 해당해서 if 문이 true로 처리가 되면 그 아래의 else if와 else에 대한 검사를 하지 않습니다.

즉, 어거지가 좀 심한 예제였던 것입니다.


그리고 switch case에 대해서 위험하다. 라는 이야기가 종종 보이고는 합니다.
이 경우에는 모두 break를 사용하지 않아서 생기는 문제입니다.


즉, 두 의견 다 좀 어거지가 심하다고만 생각이 듭니다.

개발을 하는 사람들의 취향에 맞게, 혹은 작성하는 프로젝트 등에 적합하게 짜면 되는 것이지 이건 이러니 쓰지 말아라... 이렇게 주장을 하기에는 어려움이 있습니다.

개인적인 의견을 이야기하는 것은 좋지만 혹 누군가가 보기에는 이게 좋고 저건 나쁜거다. 라고 오해를 할 수 있는 여지가 있습니다.
모두 조금씩만 주의하면 그럴 일이 없으리라 봅니다.
저작자 표시 비영리 변경 금지
신고
  1. 지나가는 2012.02.18 14:15 신고

    확실히 그런게 있는거 같아요 프로그래머의 자존심이라는게 있나 봅니다 ;

    • 가우초 2012.02.18 16:25 신고

      댓글 감사합니다.
      확실히 자존심이라는 것 때문에 싸우고 하는 경우도 있고 그렇죠.
      그냥 상대의 스타일을 존중해주는 문화가 널리 퍼졌으면 좋겠습니다.

  2. 지나가다 2014.06.01 12:19 신고

    switch문에서 위헙하다는 것이 break실수라는 것에 매우 동감합니다. ^^ (저도 안넣어서 꼬인적 많으니까요)

    if문은 무슨소리냐면

    if(a ==1){
    printf("첫번재");
    }else if(a == 2){
    printf("두번째");
    }else if(a == 3){
    printf("세번째");
    }else if(a == 4){
    printf("네번째");
    }

  3. 지나가다 2014.06.01 12:20 신고

    이런 상태일때 a가 4라면
    아래에서 부터 1,2,3을 모두 조사한후에 4에 들어가게 됩니다.

    switch문이라면 바로 4로 가게 되구요.

    이때 속도차이가 나는데 게임이라던지, 빠른 연산을 하는 프로그램에서는 치명적입니다.

+ Recent posts