갤러에 글을 쓰는건 처음이니 그냥 신고식이라고 보면된다

글을 쓰게된 동기는 이렇다, 시험기간인데 공부는 싫고 애니를 보며 할짓이없다

그래서 그할짓으로 겔러에 글을써보자는 선택을 하게된것이다.


주제는 이러하다


많은 프로그래밍을 시작하는 자들이 if문과 switch문의 차이에 대해서 궁금할것이다

대부분은 if는 적은 조건문 switch문은 많은 조건문을 관리할때 써먹는 정도로만 알고있다


근데 위 상식만으로는 의문이 들수밖에없다, 어째서 그런것일까 그냥보기 좋기때문에?

그래서 if문과 switch문에 좀더 깊게 들어가볼려고 한다.


먼저 C언어를 사용하여 간단히 if문과 switch문을 구현해보자


1.if 문

{

int a = 0;

if (a == 0)

{

printf("0");

}

else if (a == 1)

{

printf("1");

}

else

{

printf("else");

}


간단히 a의 값에 따라 0,1,else를 출력하는것을 확인할수있다

이제 이것을 디버거를 사용해 분석해보자.


viewimage.php?id=3dafdf21f7d335ab67b1d1&no=29bcc427b38477a16fb3dab004c86b6fd0548bb7fdb4d15f48496390cca9d3aecfa09061c617b90744da991277d5508789d68cb2f13cafacea53f7e879

올리디버거를 사용해서 본 main 함수의 부분이다

진심으로 귀찮지만 초보들을 위해 주소를 일일이 설명해주겠다.


0040150E 번지 : PTR SS:[LOCAL.1]에 0을 넣는다.

00401516 번지 : PTR SS:[LOCAL.1]에있는 값과 0을 비교한다

0040151B 번지 : 아닐시 0040152B 번지로 이동한다.

...

0040152B 번지 : PTR SS:[LOCAL.1]의 값과 1을 비교한다

00401530 번지 : 아닐시 00401540 번지로 이동한다

...

00401540 ~ 00401547 번지 : 위의값이 모두아닐시 printf함수 호출 "else" 출력


즉위 코드를 정리해보자면 이렇다

0과 값이 같은지 비교하고 아닐시 1과 비교하고 아닐시 "Else"부분으로 이동한다.

눈치가 있는사람을 알아챘을 것이다 조건문이 많을수록 특정조건문까지 가는데 계속 반복해야 한다는 것이다.


일단 이정도만 인지하고 switch문의 코드를 봐보자 (슬슬 귀찮아지기 시작한다...)


int a = 0;


switch (a)

{

case 0:

printf("0");

break;

case 1:

printf("1");

break;

case 2:

printf("2");

break;


     ... case 3 ~ 4


case 5:

printf("5");

break;

default:

printf("else");

break;

}


switch문을 디버거로 보면 이렇다



viewimage.php?id=3dafdf21f7d335ab67b1d1&no=29bcc427b38477a16fb3dab004c86b6fd0548bb7fdb4d15f48496390cca9d3aecfa09061c617b90744da991277d5508789808fe6a837acf2ec53f7e879

switch 문은 적은 값에서는 if문과 같은방식으로 동작되어 조건값을 좀더 올렸다.


0040150E 번지 : PTR SS:[LOCAL.1]의 값에 0을 넣는다

00401516 번지 : PTR SS:[LOCAL.1]의 값과 5를 비교한다

0040151B 번지 : PTR SS:[LOCAL.1]의 값이 5보다 크다면 00401581번지로 이동한다.


0040152B 번지 : EAX값이 가르키는 곳으로 점프한다.


00401581 ~ 00401566 번지 : 'else' 부분이다 printf 함수를 호출하여 "else"를 출력한다.


이코드를 보면 if문에 비해 꽤나 간편하다는것을 볼수있다

먼저 값과 5를비교하고 초과시 바로 default부분으로 넘어가며 아닐시

바로 해당값을 점프하는것을 확인할수있다.


만약 if문이였다면 일일이 비교한후 넘어갔을 것이다 하지만 switch문은 바로 목적지로 이동한다.

정리하자면 조건문이 적을시에는 if문과 switch문이 다를바가없고 많을시에는 switch문이 빠르다는 말이다


하지만 그렇다고해서 switch문을 강요하는것은 아니다, 그저 꼴리는대로 사용하면 된다.


이렇게 첫글을 DC에 올리게 되었으나 다시 할짓이 없어졌다.


viewimage.php?id=3dafdf21f7d335ab67b1d1&no=29bcc427b38477a16fb3dab004c86b6fd0548bb7fdb4d15f48496390cca9d3aecfa09061c617b90744da991277d5508789d7ddeffa32fea9bb53edf679