그동안에 조건문을 사용할 때 익숙한듯 당연하게 if문을 사용했었다. 그러다 최근에 switch문을 사용한 조건문을 보게 되었다. 그동안에 if문만을 당연하게 사용해왔어서 switch문이 있는 걸 알고는 있었지만 낯설었다. 그래서 둘은 무슨 차이가 있는 걸까? 하는 생각에 둘의 차이를 찾아보았다.
switch (조건) {
case 값1:
수행문1;
break;
case 값2:
수행문2;
break;
case 값3:
수행문3;
break;
default:
수행문4;
}
break문은 각 case문의 영역을 구분하는 역할을 한다.
만약 break문을 생락하면 다른 break문을 만나거나 switch문의 끝을 만날 때까지 수행된다.
case문은 여러 경우를 동시에 처리할 때 break문을 생략해 사용하기도 한다.
만약 조건식의 결과와 일치하는 case문이 없으면 default문으로 이동하게 된다. (if문의 else블럭과 같은 역할이다.)
➡️ if문은 원하는 조건이 나올 때까지 순차적으로 모든 조건을 비교하고 조건이 만족하면 실행하고 만족하지 않으면 무시한다.= Branch statement
레지스터 2개 값 혹은 레지스터와 값 비교 후 특정 메모리 번지로 이동할지 결정한다.
따져야 하는 조건이 많을 수록 연산량이 늘어난다. if문을 작성할 때, 자주 사용하는 기능 순서대로 조건문을 작성하는 것이 성능 향상에 도움이 된다.
➡️ switch문은 jump-table을 사용해서 한 번에 원하는 곳으로 이동한다. = Jump statement
처음 입력값을 확인하는 인스트럭션만 필요하고 조건을 확인할 때는 인스트럭션이 필요하지 않다. switch문은 조건이 많아져도 인스트럭션이 늘어나지 않으므로 조건이 많은 경우에는 switch문을 사용하는 것이 if문을 사용하는 것보다 더 좋다고 할 수 있다.
❗ 인스트럭션: CPU가 명령을 수행하기 위해서 메모리 상에서 명령어를 읽어오는 과정이다. 즉 인스트럭션이 적을수록 좋은것이다.
결론적으로는, 조건이 많으면 switch가 유리하고 조건이 적으면 if문이 유리하다지만 사실 요즘엔 컴파일러 성능이 좋아져서 성능을 따지는 게 의미는 없다. 그러니 그저 가독성에 어떤 것이 좋은지 판단해서 사용하면 될듯하다.
출처