디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

if VS switch

타인갤로그로 이동합니다. 2016.04.24 03:16:16
조회 2351 추천 15 댓글 2
														

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

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

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


주제는 이러하다


많은 프로그래밍을 시작하는 자들이 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



추천 비추천

15

고정닉 0

0

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 며느리, 사위되면 시댁, 처가에 잘할 것 같은 스타 운영자 25/10/13 - -
AD 프로게이머가 될테야!! 운영자 25/10/01 - -
공지 프로그래밍 갤러리 이용 안내 [96] 운영자 20.09.28 47957 65
2896615 쿠팡노동이야말로 한국 내 캄보디아라고 할 수 있다 발명도둑잡기(118.235) 19:13 9 0
2896614 아는 것을 안다 하고 모르는 것을 모른다 하는 것이 아는 것이다 발명도둑잡기(118.235) 19:09 11 0
2896613 도박과 부동산투기의 공통점 발명도둑잡기(118.235) 19:04 10 0
2896612 토지는 품질 상태가 고정되어있는데 상품취급하는 것부터 문제 발명도둑잡기(211.246) 18:59 10 0
2896611 항상 배움이 부족한거 같다. 그런 생각이 들어 [6] ㅆㅇㅆ(113.192) 18:55 27 0
2896610 3840 * 2160 세상이 유일한 락입니다 나르시갤로그로 이동합니다. 18:53 10 0
2896609 리눅스에서 한글 입력 개판인 이유 ㅋㅋ [1] 나르시갤로그로 이동합니다. 18:48 18 0
2896608 ❤✨☀⭐⚡☘⛩나님 시작합니당⛩☘⚡⭐☀✨❤ ♥덩냥이♥갤로그로 이동합니다. 18:48 9 0
2896607 현시대는 토발즈도 1찍 짱깨편인 무서운 시대이다ㅋㅋ번식 더 해줘라 이기 타이밍뒷.통수한방(1.213) 18:42 9 0
2896603 [대한민국] 세상이 혼세할 때 나타나는 현상 - 이 조 단위 돈 싱가포르 프갤러(121.172) 17:37 17 0
2896602 이재명 대통령님 ㅆㅅㅌㅊ !! [2] ♥덩냥이♥갤로그로 이동합니다. 17:32 37 0
2896601 친중극좌 재명이가 절대 못하는거 ㅇㅅㅇ [2] ♥덩냥이♥갤로그로 이동합니다. 17:16 32 0
2896599 야밤에 가을모기한테 습격 받은 타격이 이제야 회복 되는듯? ♥덩냥이♥갤로그로 이동합니다. 16:53 28 0
2896598 이런 소켓 연결 실패! 프갤러(121.172) 16:47 52 0
2896597 토지거래허가구역 지정 이거는 꼭 나쁜가? [2] chironpractor갤로그로 이동합니다. 16:31 63 0
2896596 1920x1080 모니터에서 영상 보는 게 삶의 낙임 [1] ㅇㅇ갤로그로 이동합니다. 16:23 35 0
2896595 제 2의 도쿄뀨?장? 큰 거 온당! ♥덩냥이♥갤로그로 이동합니다. 16:20 52 0
2896594 내가 할 수 있을까? 솔직히 공기업 납품은 좀 자신이 없음 [2] ㅆㅇㅆ(113.192) 16:11 54 0
2896593 일단 연구실 납품 한건이랑 자바 스프링부트 포폴 생각해봐야할듯 [2] ㅆㅇㅆ(113.192) 16:08 52 0
2896591 나는조현병이야 나는내향적이야 나는조현병이냐 너는외향병자냐 손발이시립디다갤로그로 이동합니다. 15:49 39 0
2896588 아니 ㅅㅂ 내 연봉의 2배를 받고 있으면 [3] ㅇㅇ(211.234) 14:47 71 0
2896587 오늘 뭔가 일이 한번에 몰려오네 8만원 3만원 짜리 5만원짜리 [2] ㅆㅇㅆ(113.192) 14:46 63 0
2896586 카카오페이 깔아도 카카오톡 안 깔아놓으니 못 쓰네 [2] 프갤러(182.227) 14:25 35 0
2896585 인류의 거짓된역사를 종말시킬거다 역사는 신세대인 내가 만든다 [1] 타이밍뒷.통수한방(1.213) 13:48 41 0
2896581 오늘 또 병원가야 되네 ㅎㅎ 나르시갤로그로 이동합니다. 13:12 25 0
2896580 점심 [2] 발명도둑잡기(39.7) 13:09 44 0
2896578 차에도 모기 있노 ㅅㅂ [4] ♥덩냥이♥갤로그로 이동합니다. 13:03 86 0
2896575 aws 왜씀? 프갤러(49.165) 12:29 39 0
2896573 Make Korea Great Again ! [1] ♥덩냥이♥갤로그로 이동합니다. 12:08 48 0
2896572 전공자인데 왜 취업이 안되지? [2] ㅇㅇ(175.116) 12:02 84 0
2896571 외교부 장관 윤석열 임명했다는군요 나르시갤로그로 이동합니다. 12:01 41 0
2896568 그사기가아님 프갤러(211.119) 11:27 44 0
2896567 ❤✨☀⭐⚡☘⛩나님 시작합니당⛩☘⚡⭐☀✨❤ ♥덩냥이♥갤로그로 이동합니다. 11:21 53 0
2896566 김현지 제2의 조국 사태로 번져 이재명 레임덕 ♥덩냥이♥갤로그로 이동합니다. 11:13 24 0
2896565 조선족= 짱깨 ♥덩냥이♥갤로그로 이동합니다. 11:08 31 0
2896564 반디집 있는 남자 프로페셔널 넥도리아2024(220.74) 11:07 57 0
2896562 지금 놀고 있는 애들은 배달이나 노가다 용접해라 [3] 프갤러(61.253) 10:56 73 0
2896561 드디어 PS3111 SSD 도시바 복구 키오시아 넥도리아2024(220.74) 10:54 19 0
2896560 현시대는 토발즈도 1찍 짱깨편인 무서운 시대이다ㅋㅋ번식 더 해줘라 이기 타이밍뒷.통수한방(1.213) 10:51 20 0
2896559 미개한 리액트 버리고 러스트 leptos 쓰십시오 [3] 프갤러(218.154) 10:48 51 0
2896558 마치 나라를 위해 윤석열을 뽑아놓고는 [2] 헬마스터갤로그로 이동합니다. 10:48 55 0
2896557 유지보수를 위해 철학을 도입해놓고는 헬마스터갤로그로 이동합니다. 10:47 34 0
2896556 리액트 리덕스 문법은 진짜 미개하지않냐? [4] 헬마스터갤로그로 이동합니다. 10:38 62 1
2896555 요새 일많이 없음? [6] 프갤러(180.70) 10:17 77 0
2896554 엠마❤+트젠 [5] ♥덩냥이♥갤로그로 이동합니다. 09:33 64 0
2896553 맞네 캄보디아로 시끄러운거 보니 이거 생각나네 ㅇㅇ갤로그로 이동합니다. 09:14 40 0
2896552 난 직장이랑 집이 가까워서 [3] 루도그담당(211.184) 09:03 60 0
2896551 난 소비쿠폰 의미 없다고 생각해..ㅇㅅㅇ [3] 헤르 미온느갤로그로 이동합니다. 08:50 45 0
2896550 요즘 국비 신입 연봉 얼마정도 줘야됨? [1] 프갤러(118.235) 08:49 87 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

디시미디어

디시이슈

1/2