반응형


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_

,
반응형

오늘 어쩌다 뉴스기사를 보게 되었는데,


[이코노미조선] 커피 달고 사는 직장인들…파킨슨병에 치매까지 발전 가능해 [1]


그런데 황당한 것은, 구글에 "커피 파킨슨병"으로 검색하면,



이런 내용들이 일관되게 첫 페이지에 검색 결과로 나온다. 게다가 위의 3개 기사는 모두 의학저널에 게재된 논문의 결과를 인용하고 있으며, 각 기사마다 인용하는 논문과 그 연구를 진행한 연구팀이 다 다르다.


[2] 미국 하와이 호놀룰루 재향군인 메디컬 센터, 미국의학협회지(JAMA), Neurology 분야 저널 랭킹 9위

[3] 캐나다 맥길 대학 의과대, 신경학(Neurology) 저널, Neurology 분야 저널 랭킹 10위

[4] 미국 마이애미 대학교 의과대학, Archives of Neurology, Neurology 분야 top 50위 안에는 없음.


더 확실하게 보기 위해서 좀더 상위 랭킹에 있는 저널에도 카페인(또는 커피)가 파킨슨병에 미치는 영향을 분석한 연구가 있는지 봤더니, 있었다.


[5] Alberto Ascherio MD et al., "Prospective study of caffeine consumption and risk of Parkinson's disease in men and women", Annals of Neurology, doi:10.1002/ana.1052, 2 May 2001.


Neurology 분야 top 랭킹 4위 저널에서도 위와 같이 연구결과가 있었고, 카페인을 전혀 섭취하지 않는 성인남성에 비해 카페인 섭취량이 많은 성인남성이 파킨슨병 발병 위험이 42%로 나왔다.



반면에 저 이코노미조선 기사 [1]에서는 연구 결과에 대한 인용이 전혀 없고, 다만 커피를 많이 마실 때 발생할 수 있는 손떨림 같은 증상과 파킨슨병에서도 일어나는 유사 증상을 근거 없이 연관지어서 설명하고 있을 뿐이다.


커피를 과다하게 마셔서 수전증이 일어나는 것은 사실이고,

파킨슨병의 초기 증상으로 손떨림이 일어나는 것도 사실이다.

그러나 커피를 과다하게 마시기 때문에 파킨슨병 발병으로 이어진다는 근거는 어디에도 없다.



결론적으로 "CEO 뇌 건강"이라는 중요하고 무게감 있어 보이는 특집을 달고 나오는 기사가 공신력 있어 보이는 신경학 분야 국제저널 top 4위, 9위, 10위의 연구 결과들을 모두 공격하는 위엄(?)을 보여주고 있다.


물론 의학 쪽으로는 연구가 워낙 case-by-case이기도 하고, 각 연구 결과마다 통제변인이 다양할 뿐더러, 통제변인 중 일부를 조금만 바꿔도 상관관계가 없어지거나 반대로 나타나는 등 온갖 복잡한 상황이 다 일어나는 것은 충분히 인정할 수 있다. 하지만 그 case-by-case 때문에 커피가 파킨슨병에 나쁘다는 이야기를 하고 싶으면 최소한의 근거로 공신력 있는 연구 결과를 인용했어야 한다.


적어도 지금까지의 결과들을 놓고 봐서는, "카페인이 파킨슨병의 발병을 방지하거나, 치료효과를 주기도 한다"는 명제가 더 우세한 상태다. 이것을 뒤집고 싶으면 마찬가지로 신경학 분야의 최상위 랭킹 저널에 누구든지 납득할 만한 실험 환경과 수치화된 데이터를 근거로 조심스럽게 설득을 시작해야 하는 것이지, 조선비즈의 기사처럼 오히려 비논리적으로 주장해서는 안 된다.




<참고자료>


[1] [이코노미조선] 커피 달고 사는 직장인들…파킨슨병에 치매까지 발전 가능해

http://biz.chosun.com/site/data/html_dir/2017/03/27/2017032703095.html?main_hot2

[2] 커피 파킨슨병 예방 효과, http://www.foodnews.co.kr/news/articleView.html?idxno=3377

[3] 하루 커피 2잔이면 파킨슨병 치료도 가능해 

http://news.khan.co.kr/kh_news/khan_art_view.html?artid=201208022152401&code=930401 

[4] 담배와 커피가 파킨슨병 발병위험 낮춘다

http://www.sciencetimes.co.kr/?news=%EB%8B%B4%EB%B0%B0%EC%99%80-%EC%BB%A4%ED%94%BC%EA%B0%80-%ED%8C%8C%ED%82%A8%EC%8A%A8%EB%B3%91-%EB%B0%9C%EB%B3%91%EC%9C%84%ED%97%98-%EB%82%AE%EC%B6%98%EB%8B%A4

[5] Alberto Ascherio MD et al., "Prospective study of caffeine consumption and risk of Parkinson's disease in men and women", Annals of Neurology, doi:10.1002/ana.1052, 2 May 2001.

http://onlinelibrary.wiley.com/doi/10.1002/ana.1052/full



반응형
블로그 이미지

Bryan_

,