f-lab 멘토링 중, If
문과 switch
문이 어떤 차이가 있는지에 대한 질문을 받았다. 이에 대해 정확하게 답변할 수 없었다. 비슷한 상황에 사용하는 두 분기문이 어떤 점이 다른지 궁금하기도 하여 정리해보고자 한다.
if (Expression) Statement
// or
if (Expression) Statement else Statement
If
문은 Expression 부분이 true
면 If
Statement를 실행하고 false
면 else
Statement를 실행한다.
switch (Expression) {
case Expression: {
// ...
}
// or
case Expression:
// ...
default:
// ...
}
Switch
문은 Expression의 값에 따라 case
값과 일치하는 곳으로 분기를 한다.
If
문은 equality와 logical expression을 체크하고 Switch
문은 equality만 체크한다.If
문은 integer, character, boolean과 같은 타입을 평가하고 Switch
문은 integer와 character만 평가한다.If
문의 평가식이 false라면 else
문을 실행하는 반면 Switch
문은 평가식과 맞는 case
가 없다면 default
문을 실행한다.If
문은 장황하여 수정하기 어렵고 Switch
문은 상대적으로 단순하여 수정이 쉽다.If
문은 런타임에 해석하여 분기하고 Switch
문은 컴파일 과정에서 jump table을 만들어 분기하기에 비교적 성능상 이점이 있다.위의 내용이 인터넷 검색으로 나온 If
문과 Switch
문의 차이점이다. 하지만 의문점이 많이 남았다.
If
문을 대체할 수 있다.const a = 0;
switch(true) {
case a === 0:
// 코드
case f(a) === 'no':
}