-
Swift - Control Transfer StatementsProgramming/Swift 2020. 10. 1. 01:14
이번에는 Control Transfer Statements(제어 전달문)에 대해서 공부해보겠습니다!
Control을 Transfer 한다. 제어를 전달한다는 뜻은 현재 스코프에서의 실행 중인 코드를 종료하고 다음 차례의 코드를 실행하는 것을 말합니다.
Swift에서는 5가지 제어전달문을 제공합니다.
우리는 조건문포스팅에서 5가지 중 하나인 fallthrough에 대해서 공부했습니다.
그리고 오늘은 break와 continue에 대해서 알아보겠습니다.
나머지 2개는 다음에 같이 공부하도록 하겠습니다!
break
break는 반복문과 switch문에서 주로 사용합니다.
break가 실행되면 현재 반복문이나 switch문을 종료시킵니다.
지난 포스팅에서 작성한 구구단을 출력하는 예시에서 사용해 보도록 하겠습니다.
구구단이 2단만 출력됐습니다. 흐름을 따라가 보도록 합시다.
i에 2가 전달되고 j에 1이 전달돼서 2 X 1 = 2가 출력이 됩니다. 그리고 다시 j에 2가 전달이 되고 9까지 반복합니다.
j가 1 ... 9까지 반복이 끝나면 break가 실행됩니다.
break가 실행되면 현재 반복문을 종료시킨다고 했죠?? i에 3이 전달이 되지 않고 바로 반복문이 종료되고 아래 print("Done")이 실행됩니다.
그렇다면 만약 break가 두 번째 for반복문에 들어가면 어떻게 될까요??
위와의 차이점을 아시겠나요?? 이번에도 흐름을 따라가 보겠습니다.
i에 2가 전달이 되고 j에 1이 전달이 됩니다. 그러면 2 X 1 = 2가 출력이 되고 break가 실행됩니다.
break는 현재 반복문을 종료시킨다고 했죠?
반복 상수 i의 반복문을 종료시키는 게 아니라 j의 반복을 종료시킵니다. 그럼 j에 2가 전달이 되지 않고 바로 i에 3이 전달됩니다.
break는 모든 반복을 종료시키지 않습니다. 인접한 현재의 반복문만 종료시킵니다.
이번에는 switch문에서 사용하는 예를 보겠습니다.
num에 1 ... 3까지의 정수를 랜덤하게 저장합니다.
그리고 case로 나누어서 문자열을 출력하는 코드입니다. 여기서 1, 2, 3 이 아니면, 즉 default일 때 아무것도 하지 않으려고 합니다.
그럼 여기서
이렇게만 작성해도 될까요??
조건문 포스팅에서 case나 default 다음에는 실행 가능한 코드가 적어도 한 줄 이상 있어야 한다고 했습니다.
이렇게 아무것도 안 하겠다고 빈칸으로 놔두면 에러가 발생합니다.
이때 break를 사용하여 switch를 종료시킬 수 있습니다. 물론 case 안에서도 break는 사용이 가능합니다.
Continue
continue는 반복문에서 사용합니다.
continue가 실행되면 반복 상수를 다음회차로 넘기고 반복을 계속 실행합니다.
구구단의 예를 다시 보겠습니다!
이번에는 짝수인 2, 4, 6, 8단은 출력되지 않았습니다. 코드의 흐름을 따라가 보겠습니다.
i에 2가 전달됩니다. 그리고 if문에서 i가 2의 배수 즉 짝수인지 확인하고 있습니다. 그리고 짝수라면 continue를 실행합니다.
2는 짝수이기 때문에 continue가 실행되고 바로 i에 3이 전달되고 다시 반복이 시작됩니다.
이번에는 3은 짝수가 아니기 때문에 if문 아래에 for문이 실행되고 j에 1부터 9까지 전달되며 반복합니다.
그리고 다시 i에 4가 전달되고 이러한 반복을 i에 9가 전달될 때까지 계속 반복합니다.
break와 마찬가지로 이번에는 continue를 중첩된 for문에 넣어보겠습니다.
이번에는 2~9단까지 출력되지만 각단의 짝수의 곱은 출력되지 않았습니다. 이번에도 흐름을 따라가 보겠습니다.
i에 2가 전달되고 j에 1이 전달됩니다. 그리고 j가 짝수인지 확인하고 있습니다 만약 짝수라면 continue를 실행하고 아니라면 print("\(i) X \(j) = \(i * j)")를 실행합니다. 1은 짝수가 아니기 때문에 2 X 1 = 2 가 출력됩니다
그리고 j에 2가 전달됩니다. 그럼 이제 j는 짝수이기 때문에 continue가 실행되겠죠? 그러면 바로 j에 3이 전달되고 반복을 다시 진행합니다.
continue도 break와 마찬가지로 가장 인접한 반복문의 반복 상수를 다음회차로 넘깁니다..
그렇다면 만약 안쪽에 중첩된 반복문에서 밖에 있는 반복문을 종료시키고 싶으면 어떻게 해야 할까요??
Labeled Statement
Labeled Statement는 단어 그대로 이름이 붙은 statement입니다.
주로 break와 cotinue를 사용할 때 사용하고 반복문과 if, switch문에서 사용합니다.
사용하는 방법은 statement앞에 이름과 :(colon)을 적으면 됩니다.
여기서 naming convention에 맞게 이름은 lowerCamelCase를 사용하는 게 좋습니다.
바로 예를 보도록 하겠습니다.
for 반복문 앞에 outer와 inner라는 Label을 붙였습니다.
밖에 있는 for문은 outer이고 안에 있는 for문은 inner입니다. 그리고 inner for문에서 break outer라고 작성했습니다.
이렇게 되면 break가 inner for문에서 실행되지만 outer for문의 반복을 종료합니다.
흐름을 따라가 보겠습니다.
i에 2가 전달되고 i에 1이 전달됩니다. 그리고 print("\(i) X \(j) = \(i * j)")를 실행합니다. 2 X 1 = 2이 출력되겠죠?
그리고 break outer가 실행됩니다.
그러면 outer for문이 종료가 되고 즉시 모든 반복문이 종료됩니다.
참고자료
https://docs.swift.org/swift-book/LanguageGuide/ControlFlow.html
728x90'Programming > Swift' 카테고리의 다른 글
Swift - Optional Binding, Nil-coalescing Operator (0) 2020.10.05 Swift - Optional, Forced-Unwrapping (0) 2020.10.01 Swift - Loop Statements (0) 2020.09.30 Swift - Conditional Statement (if, switch, guard) (0) 2020.09.29 Swift - Operator 종류 (0) 2020.09.28