반응형


C/C++, Java로 코딩을 하다가 가끔 접하는 상황이 있는데, 같은 목적을 if-return의 조합과 if-else의 조합 모두로 코딩할 수 있을 때 어느 것을 선택해야 하는지에 대한 것이다.


int runSomeFunction(int a, int b){

if(condition_A){

return A;

} else {

do_something_1();

do_something_2();

}

}


--------------------------------------------------------


int runSomeFunction(int a, int b){

if(condition_A){

return A;

}


do_something_1();

do_something_2();

}


조건이 1개만 있을 때는 둘 사이에 별로 차이가 나지 않는 것 같다. 하지만 첫번째 조건 이후에 또다른 조건을 검사해야 하는 2개 이상의 nested condition이 생기면 조금 다르게 보이기 시작한다.



int runSomeFunction(int a, int b){

if(condition_A){

return A;

} else {

if(condition_B){

   return B;

} else {

   do_something_1();

   do_something_2();

}

}

}


--------------------------------------------------------


int runSomeFunction(int a, int b){

if(condition_A){

return A;

}


if(condition_B){

return B;

}


do_something_1();

do_something_2();

}


아무래도 indent가 nested condition의 수만큼 더 깊어지는(?) 문제가 생긴다. 사실 둘 사이에 성능상의 차이는 거의 없다고 보이고, 결국 코딩 스타일이나 가독성의 문제로 귀결되는 것 같다.


개인적으로는 if-return으로 처리하는 것을 선호하지만, 꼭 모든 경우에 다 if-return이 가독성이 좋다고 보기도 애매할 때가 있다. 가령, nested condition 정도가 심하지는 않으면서 각 조건마다 실행해야 하는 코드의 양이 비슷하면,



int runSomeFunction(int a, int b){

if(condition_A){

do_something_1();

do_something_2();

do_something_3();

do_something_4();

} else {

do_something_5();

do_something_6();

do_something_7();

do_something_8();

}

}


--------------------------------------------------------


int runSomeFunction(int a, int b){

if(condition_A){

do_something_1();

do_something_2();

do_something_3();

do_something_4();

return;

}


do_something_5();

do_something_6();

do_something_7();

do_something_8();

}


이런 경우에는 if-else가 서로 다른 조건에 대한 코드들의 차이를 알아보기에 더 좋은 것처럼 보인다.


if-return이 가장 효과적일 때를 생각해 본다면, 초반에 input parameter라던지 변수의 null 여부 같은 것을 확인해서 함수/메쏘드 나머지 부분의 실행 여부를 판단해야 할 때가 아닐까?


int runSomeFunction(int a, int b){

if(var_A == NULL) return;

if(var_B < 0) return;


do_something_1();

do_something_2();

do_something_3();

do_something_4();

}



결론적으로, if-else와 if-return 사이에 성능의 차이는 별로 없기 때문에 본인의 코딩 스타일과 가독성을 생각해 가면서 그때그때 상황에 맞게 정하는 수밖에 없겠다. Indentation을 많이 하는 것을 선호하지 않는다면 if-return 조합으로 코딩하는 비중이 좀더 늘어나는 정도로 생각하면 될 것 같고, 그게 꼭 정답이라기보다는 개인마다 가독성에 대한 기준도 다르니까, 맞춰서 쓰면 될 것이다.



<참고자료>

[1] http://stackoverflow.com/questions/9267643/if-return-vs-if-else-efficiency


반응형
블로그 이미지

Bryan_

,