데브킹덕 2021. 12. 21. 16:10

1. if - else 구문

- if - else 구문의 기본 형태

- if만 단독으로 사용해도 되고, else, else if 와 조합해서 사용 가능합니다. 

- if 뒤의 조건 값애는 Bool 타입의 값만 위치해야 합니다. 

- 조건을 감싸는 소괄호는 선택사항입니다. 

 

반복문 구조

if조건{

  /* 실행 구문 */

} else if 조건{

/* 실행 구문 */

}else{

 /*실행 구문*/

}

 

코드로 보기

- if - else 의 사용

 

let someInteger = 100

 

if someInteger<100{

  print("100 미만")

} else if someInteger > 100{

  print("100 초과")

} else{

  print("100")

} //100

 

// 스위프트의 조건에는 항상 Bool 타입이 들어와야 합니다.

// someInteger는 Bool 타입이 아닌 Int 타입이기 때문에 컴파일 오류가 발생

//if someInteger{}

 

2. switch 구문

- 기본적으로 사용하던 정수타입의 값만 비교하는 것이 아니라 대부분의 스위프트 기본 타입을 지원하며,

다양한 패턴과 응용이 가능합니다.

- 스위프트의 다양한 패턴은 확인 링크 

 https://docs.swift.org/swift-book/ReferenceManual/Patterns.html#//apple_ref/doc/uid/TP40014097-CH36-ID419 

 

Patterns — The Swift Programming Language (Swift 5.5)

Patterns A pattern represents the structure of a single value or a composite value. For example, the structure of a tuple (1, 2) is a comma-separated list of two elements. Because patterns represent the structure of a value rather than any one particular v

docs.swift.org

 

- 각각의 case 내부에는 실행가능한 코드가 반드시 위치해야 합니다.

 

 

switch 구조

switch 비교값{

case 패턴:

  /* 실행 구문 */

default:

  /* 실행 구문 */

}

 

코드로 보기

// 범위 연산자를 활용하면 더욱 쉽고 유용

switch someInteger{

case 0:

  print("zero")

case 1..<100:              ------->    A..<B    A이상B 미만

  print("1~99")

case 100:

  print("100")

case 101...Int.max:     --------> A...B    A이상B이하

  print("over 100")

default:

  print("unknown")

} //100

 

// 정수 외의 대부분의 기본 타입을 사용할 수 있습니다

switch "yagom"{

case "jake":

   print("jake")

case "mina":

   print("mina")

case "yagom":

   print("yagom!!")

default:

  print("unknown")

} // yagom!!

 

- 매우 한정적인 값(ex, enum의 case 등)이 비교값이 아닌 한  default 구문은 반드시 작성해야 합니다.

- 명시적 break를 하지 않아도 자동으로 case마다 break됩니다.

- fallthrough 키워드를 사용하여 break를 무시할 수 있습니다.

- 쉼표(,)를 사용하여 하나의 case에 여러 패턴을 명시할 수 있습니다.

case "jake","mina":

   print("jake")

 

댓글 참고

switch구문은 상대적으로 다뤄야 할 케이스가 많은 경우, if else로 구현한 코드보다 더욱더 빠른 성능을 보인다.

하지만 상대적으로 적은 case들에 대해서 jump해야할 구간이 명확한 if-else와 달리 점프테이블을 만들어서 해당 케이스로 점프해야하는 switch구문의 특성상 테이블을 만드는등의 오버헤드가 없는 If-else문이 더욱 뛰어나다고 생각합니다! 따라서 case가 많을 경우에 switch구문을, case가 적은 경우 if-else문을 사용하는것이 옳다고 생각합니다.