if 구문과 guard 구문이 궁금하다면 아래 링크로🙂
Swift 조건문 1
다른 말로 분기분(Branch Statements)라고도 불리는 조건문은 프로그램에서 하나 또는 그 이상의 조건값에 따라 특정 구문을 실행하도록 프로그램의 흐름을 분기하는 역할을 한다. 조건문에 사용되
sheep1sik.tistory.com
Swift 조건문 2
if 구문에 이어서 하는 guard 구문 if 구문이 궁금하면 아래 링크로 가자 !! Swift 조건문 1 다른 말로 분기분(Branch Statements)라고도 불리는 조건문은 프로그램에서 하나 또는 그 이상의 조건값에 따라
sheep1sik.tistory.com
Switch 구문은 앞에서 설명했던 if와 guard처럼 분기문의 일종이지만, 처리 방식은 앞에서와 다르다. 한번 알아보도록 하자.
1. switch
switch 구문은 입력받은 값을 조건식 여부가 아니라 패턴으로 비교하고 그 결과를 바탕으로 실행 블록을 결정하는 조건문이다. 이 구문은 나열된 패턴들을 순서대로 비교하다가 일치하는 첫 번째 패턴의 코드 블록을 실행한다.
switch 구문을 굳이 사용하지 않고 if - else if 구문만으로도 필요한 코드 작성은 가능하지만 다양한 가능성이 있는 여러 개의 비교에 효율적으로 대응하기에는 조금 부족한 if 구문의 대안이 switch 구문이라고 할 수 있다.
switch < 비교 대상 > {
case < 비교 패턴1 > :
< 비교 패턴1이 일치했을 때 실행할 구문 >
case < 비교 패턴2 >, < 비교 패턴3 > :
< 비교 패턴2 또는 3이 일치했을 때 실행할 구문 >
default :
< 어느 비교 패턴과도 일치하지 않았을 때 실행할 구문 >
}
모든 switch 구문은 case 키워드로 시작하는 여러 가능한 패턴을 나열하는 방식으로 구성된다.
비교대상과 비교 패턴이 일치할 경우 그에 해당하는 구문이 실행된 후 나머지 case에 대한 비교 없이 switch 구문을 종료하고, switch 구문 다음에 나오는 실행 블록으로 진행한다. 만약 비교 패턴 어느 것과도 일치하지 않았다면, 맨 마지막에 작성된 default 구문의 코드가 실행된다.
C나 JAVA 등 많은 언어에도 switch 구문이 있고 문법 역시 유사하지만, 실행 방식에서는 결정적인 차이점이 존재한다.
C나 JAVA에서는 비교 패턴이 일치할 경우 우선 실행 구문을 처리한 다음, 나머지 case에 대한 비교를 계속 진행한다. 추가로 일치하는 패턴이 있다면 이를 모두 실행하고, 마지막 case를 비교한 후에야 분기문을 종료한다.
스위프트의 switch 구문은 일치하는 비교 패턴이 있을 경우 해당 블록의 실행 코드를 처리하고, 더 이상의 비교 없이 전체 분기문을 종료한다.
📝 일치하는 비교 패턴이 여러 개 있어도 맨 처음 일치하는 case 구문 하나만 실행함
C나 JAVA처럼 switch문 있길래 다 같은 switch문인 줄 알았는데 실행방식이 다르네 🤪
다른 언어에서 switch 구문의 각 키워드 블록마다 break 구문을 추가해야 하는데 스위프트에서 생략할 수 있는 이유도 여기에 포함
switch 구문에는 패턴이 일치하는 case 블록을 대신하는 대신, 그 다음 case 블록으로 실행 흐름을 전달하는 문법이 있는데, 이를 Fall Through 라고 한다. 특히, 명시해주지 않아도 적용된다는 점에서 암시적인 Fall Through 라고 한다.
let Char : Character = "a"
switch Char {
case "a" :
case "A" :
print("글자 A")
default :
print("일치하는 글자 없음")
C언어의 계열의 언어에서는 위 코드에 대한 결과값으로 "글자 A" 라는 print문이 실행이 될 것이다.
암시적인 Fall Through가 적용되면서 실행 흐름이 전달된 비교 블록이 패턴 일치 여부와 상관없이 실행해 처리한 것이다. case "a"문과 일치하지만 case "A"문이 실행되는 걸 볼 수 있다.
하지만 스위프트에서는 이러한 암시적인 Fall Through를 지원하지 않으며, case 실행 블록이 비어 있어서도 안된다.
대신 명시적으로 fallthrough 구문을 사용함으로써 같은 결과를 얻을 수 있다
let Char : Character = "a"
switch Char {
case "a" :
fallthrough
case "A" :
print("글자 A")
default :
print("일치하는 글자 없음")
fallthrough 구문이 사용된 case 블록은 비교 패턴이 일치할 경우 인접한 case 블록으로 실행 흐름을 전달한다.
fallthrough에 의해 실행 흐름을 전달받은 case 블록은 비교 패턴의 일치 여부와 상관없이 작성된 구문을 실행한 후 switch 구문을 종료하는 것 이다.
1-2. switch 구문의 특성
스위프트에서 switch 구문에 사용된 비교 대상은 반드시 하나의 비교 패턴과 일치해야 한다.
비교 대상이 비교 패턴 중 어느 것과도 일치하지 않아 분기분 내의 어떤 블록도 실행되지 못하는 경우 switch 구문이 실패( fail )했다고 부르는데, 스위프트는 실패한 switch 구문을 완전한 비교 패턴을 구성하지 못한 것으로 간주한다.
완전하게 작성된 switch 구문은 비교 패턴 중 어느 하나라도 반드시 일치해야 한다.
switch 구문에는 모든 case 구문에 일치된 패턴을 찾지 못했을 경우를 대비해 default 구문을 추가해야 하며, default 를 생략하면 완전하지 않은 구문으로 간주하여 오류가 발생한다.
📝 단, default 구문을 대신하여 모든 패턴을 매칭시킬 수 있는 구문이 존재하는 경우 생략 가능
case 비교 패턴을 작성할 때, 하나의 case 키워드 다음에 하나 이상의 비교 패턴을 연이어 작성할 수 있다.
이는 키 입력의 낭비를 줄이고 코드를 보다 간결하게 만드는데 효과적이다
// 예시
var value = 3
switch value {
case 0, 1:
print("0 또는 1입니다")
case 2, 3:
print("2 또는 3입니다")
default :
print("default입니다")
'메모장' 카테고리의 다른 글
Swift 배열 순회 탐색 (3) | 2023.03.14 |
---|---|
Swift 배열 (4) | 2023.03.13 |
Swift 조건문 2 (3) | 2023.03.08 |
Swift 조건문 1 (2) | 2023.03.07 |
Swift 타입 추론과 타입 어노테이션 (1) | 2023.03.06 |