본문 바로가기
iOS/Swift

Swift) Switch vs If else

by Jiseong 2022. 2. 12.

🍎 switch란?

switch는 들어오는 수(value to consider)를 보고 조건이 True인 case로 진입(점프)한다.

 

다른 언어같은 경우엔 각 case마다 break를 걸어 탈출하지 않는다면, 이후의 case까지 진입하지만, Swift에서의 switch는 fallthrough를 기본적으로 지원하지 않으므로, case마다 break를 걸어줄 필요가 없다.

switch statements in Swift don’t fall through the bottom of each case and into the next one by default

https://docs.swift.org/swift-book/LanguageGuide/ControlFlow.html#ID130

대신 fallthrough 되길 원한다면 case에  fallthrough를 적어줘야 한다.

☄️ fallthrough

let alphabet = "a"

switch alphabet {
case "a":
	print("a and")
	fallthrough
case "b":
	print("b")
default:
	print("Not alphabet")
}

위 코드의 결과는 "a and 줄바꿈 후 b" 가 나온다.

 

결과에서 볼 수 있듯이 fallthrough를 사용하면 한 case가 만족되고 탈출하는 것이 아닌, 만족된 case 이후의 case 조건을 무시하고 내부 블럭을 실행한다.

🔥 switch vs if else

  • 조건이 많은 상황에서 if 보다 가독성이 좋다.
  • 복잡한 중첩 조건문을 사용하지않고, 여러 조건을 하나로 처리함으로써 여러 다른 조건값에 대해 동일한 결과를 출력(실행)할 수 있게해준다.
  • if의 경우 조건이 만족할 때까지 순차적으로(위에서 아래로) 여러 조건을 비교하지만, switch의 경우, 들어오는 것(위 코드를 예로 들면 alphabet)을 보고 조건이 True인 case로 진입(점프)한다.
  • if문은 조건문의 개수만큼 O(n)의 시간복잡도를 갖게되어 성능에 단점이 있고, switch문은 case의 개수만큼 jump-table을 차지하므로 메모리에 단점이 있다.

이로인해 if보다 switch가 빠르고 가독성이 좋다는 것이 차이인 것 같다.

🔍 나의 느낌?

얕은 지식을 가진 나의 느낌을 말해보자면.. if와 switch의 구문 사용에 따른 성능차이는 미비할 것 같아 상황에 따라 가독성이 좋은 것을 택하는 것도 하나의 방법인 것 같다.

'iOS > Swift' 카테고리의 다른 글

일반화, 추상화, 캡슐화, 은닉화, 암호화  (0) 2022.02.12
Swift) return에 대한 의문  (0) 2022.02.12
Swift) Error Handling  (0) 2022.02.12
함수 전달인자명과 파라미터명  (0) 2022.02.12
Swift) Optional Binding  (0) 2022.02.10

댓글