우연히 Junior, Senior, Lazy 프로그래머를 구분하는
코딩에 대한 글을 보았다.
소스코드를 보면 아래와 같다.
물론 EDW519를 보다가 생각이 났다.
====
Junior Programmer: if (m==1){Month="January")} if (m==2){Month="February")} if (m==3){Month="March")} if (m==4){Month="April")} if (m==5){Month="May")} if (m==6){Month="June")} if (m==7){Month="July")} if (m==8){Month="August")} if (m==9){Month="September")} if (m==10){Month="October")} if (m==11){Month="November")} if (m==12){Month="December")} --------------------------------------------------------------- Senior Programmer: switch(m) { case 1: Month = "January" break; case 2: Month = "February" break; case 3: Month = "March" break; case 4: Month = "April" break; case 5: Month = "May" break; case 6: Month = "June" break; case 7: Month = "July" break; case 8: Month = "August" break; case 9: Month = "September" break; case 10: Month = "October" break; case 11: Month = "November" break; case 12: Month = "December" break; default: Month = "unknown" } --------------------------------------------------------------- Lazy Programmer: MonthNames == ["","January","February","March",...] Month = MonthNames[m]
====
위의 글을 볼때만 해도 음... 보기가 깔끔해서 그런건가 싶었다.
뭔가 성능적인 문제도 있겠지만..
아래의 글을 보면서 난 아직도 형편없나보다 싶어서 찾게 되었다.
Signs You’re a Crappy Programmer
==> You execute too much code because you don’t know the difference between “if” and “case”.
매우 많은 코드를 실행한다면 당신은 형편없는 프로그래머,
왜냐면, 당신은 if와 case의 차이를 모르기때문에..
그렇다.. 난 여태 if와 case문의 차이점에 대해서 알려는 시도조차 안했다. OTL..
그래서 구글링으로 뒤적이다보니 아래의 링크에 아주 기가 막히게 설명을 해두었다.
http://blog.naver.com/PostView.nhn?blogId=kki2406&logNo=80041410085
1. 성능을 향상시키느냐, 메모리 사용량을 줄이느냐의 문제가 있다.
- 성능이 중요한 경우 : switch case문을 사용
- 메모리 사용을 줄이고자 하는 경우 : if else문을 사용
2. swtich-case문의 특성
- case값은 가급적 순차적으로 감소 혹은 증가하는 것이 메모리 관리면에서 좋다.
- case문의 개수가 4 미만이면 jump table을 사용하지 않고 그 이상이면 jump table을 사용한다.
물론 사용하지 않는것이 성능면에서 좋을것 같다.
- 1,2,3,1000 이런 경우에는 1,2,3에 대한 table을 생성하고 진입할 때, 1000은 따로 분기함.
- gcc 4.4.3의 경우에는 table을 생성하지 않는다..는 추가내용까지
위의 내용은 링크된 블로그에 assembly 코드를 가지고 설명을 해뒀는데
참.. 볼수록 잘 썼다. ㅋㅋ
'Language > C' 카테고리의 다른 글
extern 선언에 대한 쉬운설명 (1880) | 2012.12.07 |
---|---|
fwrite함수 예제 (758) | 2012.11.06 |
바이너리 파일전송 C언어 예제 -클라이언트- (467) | 2012.10.18 |
바이너리 파일전송 C언어 예제 -서버- (158) | 2012.10.18 |
itoa 함수 예제 (468) | 2012.10.17 |