[JS] switch문과 if문의 차이

김채운·2023년 3월 21일
0

JS

목록 보기
3/3

그동안에 조건문을 사용할 때 익숙한듯 당연하게 if문을 사용했었다. 그러다 최근에 switch문을 사용한 조건문을 보게 되었다. 그동안에 if문만을 당연하게 사용해왔어서 switch문이 있는 걸 알고는 있었지만 낯설었다. 그래서 둘은 무슨 차이가 있는 걸까? 하는 생각에 둘의 차이를 찾아보았다.

👉 switch문 구조

switch (조건) {
  case1: 
    수행문1;
    break;
    
  case2: 
    수행문2;
    break;
    
  case3: 
    수행문3;
    break;
    
  default:
    수행문4;
}

break

break문은 각 case문의 영역을 구분하는 역할을 한다.
만약 break문을 생락하면 다른 break문을 만나거나 switch문의 끝을 만날 때까지 수행된다.
case문은 여러 경우를 동시에 처리할 때 break문을 생략해 사용하기도 한다.

default

만약 조건식의 결과와 일치하는 case문이 없으면 default문으로 이동하게 된다. (if문의 else블럭과 같은 역할이다.)

👉 switch문과 if문의 차이

➡️ if문은 원하는 조건이 나올 때까지 순차적으로 모든 조건을 비교하고 조건이 만족하면 실행하고 만족하지 않으면 무시한다.= Branch statement
레지스터 2개 값 혹은 레지스터와 값 비교 후 특정 메모리 번지로 이동할지 결정한다.
따져야 하는 조건이 많을 수록 연산량이 늘어난다. if문을 작성할 때, 자주 사용하는 기능 순서대로 조건문을 작성하는 것이 성능 향상에 도움이 된다.

  • branch 판단 (true,false)
  • 실행을 할건지 말건지 판단
  • jump table을 만드는데 걸리는 시간적 오버는 없지만 branch 유무를 파악하기 위한 instruction이 지속적으로 필요하다.
  • 조건의 수가 적을수록 if문이 유리하다.

➡️ switch문은 jump-table을 사용해서 한 번에 원하는 곳으로 이동한다. = Jump statement
처음 입력값을 확인하는 인스트럭션만 필요하고 조건을 확인할 때는 인스트럭션이 필요하지 않다. switch문은 조건이 많아져도 인스트럭션이 늘어나지 않으므로 조건이 많은 경우에는 switch문을 사용하는 것이 if문을 사용하는 것보다 더 좋다고 할 수 있다.

  • jump할 위치 찾아야 함.
  • 어떤 코드를 실행할 것인지 판단
  • 조건에 맞는지 안 맞는지를 판단하는 것이 아니라, switch문 시작 시 입력받은 값을 확인하는 instruction만 필요하다(점프테이블에서 해당 값으로 찾아가기 때문에) 하지만 점프테이블을 만드는 시간적 오버(오버헤드)가 존재한다.
  • 조건의 수가 다양하고 많을수록 switch문을 쓰는 것이 유리하다.

인스트럭션: CPU가 명령을 수행하기 위해서 메모리 상에서 명령어를 읽어오는 과정이다. 즉 인스트럭션이 적을수록 좋은것이다.

결론적으로는, 조건이 많으면 switch가 유리하고 조건이 적으면 if문이 유리하다지만 사실 요즘엔 컴파일러 성능이 좋아져서 성능을 따지는 게 의미는 없다. 그러니 그저 가독성에 어떤 것이 좋은지 판단해서 사용하면 될듯하다.

출처

0개의 댓글