요즘 좀 프로젝트 말미라 빡시게 돌아간다.


하면서 개인 스터디를 하고 있는데, 하면서 알게된 기초적인 프로그래밍 문법





다들 if문과 switch문이 비슷한 용도로 쓰이는것을 알것이다.

물른 다르지만 비슷하다.


즉 조건식으로 분기를 하기위해 사용되는데 개발자에 따라, 회사간의 정책에 따라 사용하는 방법은 다 다르겠지

Whatever!


나는 vs2005를 사용(.Net 2.0)


if문과 switch문에서 int a = 10을 주고

if( a == 0) ~

else if (a == 1) ~

else if (a == 2) ~

else if (a == 3) ~

~~~


이렇게 흘러가는데 만약 조건에 맞는 식이 저 밑에 있다고 치면 if문을 위에서부터 하나씩 전부 검사하고 내려온다.

이것을 어셈블리어로 확인할 수 있다.


if문에 진입하기 직전에 BreakPoint를 걸고 실행하면 if문앞에서 걸리면서 소스가 나올것이고,

소스화면에서 마우스 오른쪽 -> Go to Disassembly를 통해 확인할 수 있다.


대충 보면(나도 어셈블리어는 모른다 갸초보라 ㅠㅠ) jmp가 그 주소로 이동한다는  소리인데,

if문은 각 else if 문이 끝나는 지점에서 다음 else if 문의 주소로 jmp를 한다.(왜 jmp명령어를 사용하는지는 어셈블리어를 몰라서 모름. return 도 아닌데..)

if문은 이런식이고.....


switch문도 BreakPoint를 직전에 걸고 실행한 후 Disassembly를 통해 보면 switch인 조건식 검사 구문에서 다음 첫 case를 넘어가기 전까지 여기서 조건을 검사한 후 바로 해당 case로 넘어간다. case가 없으면 default가 지정되어 있으면 거기로 넘어가고  아니면 switch문 밖으로 jmp해버린다.


이것이 바로 if문과 switch문의 차이이기 때문에 실제 실행 속도면에서도 조건식이 많을경우 switch문이 빠른것을 알 수 있다.


+ Recent posts