09. 조건문
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 구문
- 기본적으로 사용하던 정수타입의 값만 비교하는 것이 아니라 대부분의 스위프트 기본 타입을 지원하며,
다양한 패턴과 응용이 가능합니다.
- 스위프트의 다양한 패턴은 확인 링크
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문을 사용하는것이 옳다고 생각합니다.