CAFE

스터디 게시판*

If 문과 Switch 문의 속도 차이

작성자정호|작성시간11.12.29|조회수1,852 목록 댓글 3

 

보통 C 언어 책을 보면 if 문이 먼저 나오고 switch 문이 그 후에 나온다. 그 이유는 아마 조건문중 가장 배우기 쉽고 다방면으로 적용해서 쓸수 있는 반면에 switch 문은 조건 값으로 정수 밖에 받지 못하기 때문이 아닐까 생각한다.

 

 

그럼 지금부터 본론으로 들어가서 문법적인 이해는 어느정도 아시리라 생각하고 설명하겠다. 

 

if 문은 if else 조합으로 이루어져 있다. switch 문은  case: case: defalut: 의 조합으로 이루어져 있다.

 

둘의 접근 방식을 비교 하면 if 문은 순차적인 비교 switch 문은 조건값과 일치하는 case 문으로 이동이다.

 

일반적으로 생각한다면 if 문은 하나하나 맞나 안맞나를 비교해야 하고 switch 문은 한번에 찾아 가니 switch 문이 더 빠르다 할수 있다.

 

실제로도 예외 적인 상황을 제외 하고는 switch 문이 더 빠르다.

 

예외 적인 상황이 무엇이냐 하면 ..

 

if 문의 비교 대상이 얼마 되지 않을시 : 이럴때는 그냥 if 문을 사용하는게 낫다.

 

switch 조건 정수 사이의 숫자 간격이 클시에 : switch 문을 어셈블리 언어로 디컴파일 하게되면 switch 문이 조건 대상을 찾을때 점프 테이블이란 것을 이용한다는 것을 알수 있다. 점프 테이블은 생성시 case 주소값을 수용하기위한 공간이 생긴다. 

 

예를 들어

case 1:

case 2:

case 10:

 

세개의 case가 있다면 점프 테이블은 세개의 공간을 만드는것이 아니라 10개의 공간을 만든다. 그 사이에 case 가 추가될수가 있기 때문인듯

 

여기서 어떠한 상황이 문제가 되냐하면

 

case 1:

break;

case 2:

break;

case 5:

break;

case 100000:

break;

이런 상황이 일어나게 되면 점프테이블은 100000개의 공간을 마련해야한다. 그야말로 엄청난 메모리 낭비이다. 그래서 숫자와 숫자 사이에 어느 정도 큰차이가 있을시 점프테이블의 비교가 아닌 if else 의 비교에 의한 분기를 사용한다.

연산이 늘어남으로 해서 속도는 떨어질수밖에 없다.

 

 

결론을 내자면 조건 검사가 두세개이거나, 조건의 대부분이 한두개의 결론에 몰려있을시 if 문을 사용하는게 좋다.

 

반면 조건 검사수가 적당히 많을시 switch 문을 사용하는게 좋다.

 

 

 

다음검색
현재 게시글 추가 기능 열기

댓글

댓글 리스트
  • 작성자09.배현우 | 작성시간 11.12.31 감사 합니다. ^^ 좋은정보네요 ^^ 하지만 아직 저 둘의 속도차이를 느낄만큼의 플밍을 안해봐서 (솔직히 할수 없는 곳에 갇혀있어서) 빨리 해보고 싶네요
  • 작성자05.김종훈 | 작성시간 12.01.26 제 어리석은 사견으로는 사실 크게 차이는 없는 부분이기 때문에..(가만히 생각해보니 모바일 플랫폼은 또 다르겠군요..)
    switch 나 if 의 사용은 코드 보기 좋은 것이 좋다고 생각합니다. ^^ 좋은 내용 잘 읽었습니다!!
  • 작성자정호 작성자 본인 여부 작성자 | 작성시간 12.01.20 맞아.. 사실... 요즘 컴퓨터가 워낙 좋아져서 그닥 차이를 느낄수가 없징.. ㅠ 모바일도 머 그닥 큰 차이는 못느끼고.. 근데 좋은 습관이 좋은 코드와 관련이 있는거니까 좋은 습관을 위해서.. ㅎ
댓글 전체보기
맨위로

카페 검색

카페 검색어 입력폼