'Switch'에 해당되는 글 1건

  1. 2012.01.12 제2강. if 문과 switch 문의 최적화
크리에이티브 커먼즈 라이선스
Creative Commons License
굿 모닝 에브리 바디 ㅋㅋ

날씨가 굉장히 춥군요 ㅋ

여친님이 모닝콜 안했으면 아조 그냥 저세상 갈때까지 잠만 잘뻔했네 ㅋㅋ

오늘의 주제는 if 문과 switch 문의 최적화 입니다.

if 문과 switch 문의 차이점은 다 아시지요???

간단하게 한번 집고 넘어가자면,

다중 if 문을 쓸경우 (if, else if, else if ...... , else) 순차적으로 조건을 모두 비교해나가고,
switch 문은 비교 변수 인자와 비교를 해서 해당되는 case 로 바로 분기한다.


이해가 되실려나?? 

아 이게 안좋은 점이야 ㅋㅋ 분명히 최적화 글을 읽으려고 오신분 들은 저 정도 차이는 아실텐데 자꾸 자세히 쓰게되네 ㅠㅠ

Psudo Code 로 잠시 표현을 해보지요 

if(a==1)
else if(a==2)
else if(a==3)
....
else

와 같이 썼다고 가정해보지요. a == 100 까지 있다고 치공 ㅋㅋ

a ==99 가 들어왔어요 ㅋㅋ

그럼 바로  else if (a==99) 로 가지를 못하고, a==1 이였나??/ 거짓 ! 그럼 a==2야?? 아니 ㅋㅋ

이러면서 99 가 나올때까지 계속 비교를 한다는 것이지요 ㅋㅋ

하지만!!!

 switch 문은 a ==99 가 들어오면 99번에 해당하는 케이스로 바로 분기를 해 간다는 소리입니다.

즉! 차이점은?? 비교를 여러번 하느냐 한번만 하느냐의 차이라고 볼수 있습니다.

근데 여기서 하려고 했던 이야기는 이런것이 아니고 ㅋㅋㅋ

부득이 하게 위와 같은 다중 if 문을 쓸 경우에는 다중 분리 분기문을 이용해서 사용하면 오버헤드를 줄일수있습니다. 

예를 볼까요???

if(a==1)
else if(a==2)
....
else if(a==8)

과 같이 짜진 코드를 이진 분리해보면

if(a<=4)
{
if (a==1)
...
else if(a==4)
}
else
{
else if(a==5)
....
else if (a==8)
}
 
이런 식으로 짜면 확실히 비교의 횟수가 줄어들었지요????

switch 문 같은경우도 좀더 효율적으로 사용하기 위해서는

비교 인자를 문자로 사용할 때 보다 바로 숫자로 사용할때가 훨씬 좋습니다. 문자로 사용할때는 컴파일러가 형변환을 하게 되어서 시간이 조금 더 걸리거등여 ㅋㅋ

그리고 확률적으로 자주 사용될수 있는 케이스를 앞쪽에 위치시켜 주는 것도 한 방법이라 할 수 있겠습니다.
이것은 if 문에도 적용되는 이야기 입니다.

정리해 볼까용?

(1) 다중 분기문의 비교문에서 사용하는 연산은 한번만 수행하고, 이를 변수에 저장하여 사용한다.
(2) if 문 보다는 switch문이 속도, 메모리 적인 측면에서 모두 효율적이다.
(3) if 문으로 표현해야 한다면 선택될 확률이 높은 비교문을 앞쪽에 위치시기고, 이진 분리 분기 등과 같이 비교문의 실행을 줄이는 방법을 모색하도록 한다.
(4) 비교문과 같이 반복적으로 사용되는 데이터의 데이터 타입을 잘 선택한다.

등으로 정리 할 수 있겠군요.

이것 또한 자투리 지식으로 알아 둔다면 나중에 아는 척 하기 딱 좋겠지요? ㅋㅋㅋ

그럼 바이바바이
 
 
저작자 표시 비영리 동일 조건 변경 허락
신고
Posted by J.Bear


티스토리 툴바