JAVA

if-else 과 switch 어느 것이 효율적일까?

superbono 2022. 2. 25. 17:55

 

갑자기 분기 코드를 짤 때 if-else 를 쓰는 것이 더 경제적일지, switch 문을 작성하는 것이 경제적일지 궁금해서 찾아본 결과, 

결론부터 말하자면 분기의 수가 많다면(약 5개 이상?) switch 문으로 작성하는 것이 더 낫다고 한다. 

그 이유는 switch 문으로 분기의 수가 많다면( 약 5개 이상? 정확한 숫자는 모르겠다. 글마다 조금씩 다름) 컴파일러가 branch table(또는 jump table)을 빌드하여 수행 속도가 더 빠르다고 한다. 

 

분기의 수가 적다면 딱히 차이는 나지 않지만, 수가 많아질수록 성능 차이가 발생할 수 있다고 한다. 

 

* 문자열 비교에서의 switch 문

문자열을 다루는 일이 생각보다 많다보니, swtich 문을 적용할 일이 생겼는데 이러한 상황에 고려해야하는 것들을 찾아보았다. 

  • 대소문자 구분
  • 문자열은 null 이 아니어야 한다. 
  • 문자열 비교는 비용이 많이 들게 되므로 신중할 것(그래도 if-else 보다는 위에 적은 내용 때문에 효율적이라고 한다.)

 

1. 대소문자 구분

switch 문에서 해당되는 case를 찾을 때, string의 equals() 메소드를 쓰는 것과 같은 방식으로 동작하기 때문에, case 문의 대소문자를 구별한다.

문자열이 apple, case가 apple 인 경우는 해당 case 문에 해당이 되겠지만, case 가 Apple인 경우에는 해당되지 않을 것이다.

2. 문자열은 null 이 아니어야 한다.

3. 문자열 비교는 비용이 많이 들게 되므로 신중할 것

문자열 비교 자체는 비용이 꽤 드는 연산이고, 또 어떤 문자열이 입력될지 모르기 때문에 더욱 경계해야하는 것은 사실이다. 그렇기 때문에 최대한 문자열 비교를 덜 수행할 수 있는 방법, 문자열 비교 연산을 하기 전에 어떤 특정한 경우에만 문자열 비교를 하게끔 한다던지, 하는 조건 등을 적용한다면 더 좋을 것 같다.

'JAVA' 카테고리의 다른 글

JVM의 메모리 구조  (1) 2022.07.13
JAVA 정규식 표현과 정규식  (0) 2022.02.23
Exception (예외)  (0) 2022.02.13
IntelliJ 단축키 설정  (0) 2021.11.30
Call By Value / Call By Reference  (0) 2021.08.14