-
[레인스톤 iOS] 스위프트 easy하게 배워볼까? - 제어문(3)Swift 기초문법 2022. 4. 10. 16:10반응형
안녕하세요!
iOS개발자로 일하고있는 레인스톤입니다:)
오늘은 제어문 마지막편!
제어 전송 구문에 대해서 학습해보겠습니다.
제어 전송 구문
제어 전송 구문은 코드의 진행 여부를 결정할 때 또는 코드의 흐름을 바꿀 때 사용합니다.
설명만 보면 이해가 조금 어렵죠?
제어문의 종류와 예시를 코드로 살펴보겠습니다:)
continue
continue는 현재 loop를 중지하고 다음 loop를 수행하도록 만들어줍니다.
let vowel: [Character] = ["a", "e", "i", "o", "u"] let sentence = "today is sunday" for character in sentence { if !vowel.contains(character) { continue } print(character, terminator: " ") } // o a i u a
today is sunday라는 문장에서 모음만 출력하고 싶을 때 continue를 활용할 수 있습니다.
for-loop를 통해 모든 character에 접근하고 모음이 아닐 때는 continue를 활용해줍니다.
예를 들면 t의 경우에는 if문의 조건을 통과하여(모음이 아니기때문에) continue가 실행됩니다.
그렇게되면 print가 호출되지 않고 다음 loop(이 경우에는 t다음에 있는 o)를 실행합니다.
건너뛰기 정도라고 생각해주시면 이해가 쉬울 거 같아요!
break
break는 loop 또는 switch문에서 사용합니다.
continue와는 다르게 즉시 전체 제어문의 실행을 중지시킵니다.
let vowel: [Character] = ["a", "e", "i", "o", "u"] let sentence = "today is sunday" for character in sentence { if !vowel.contains(character) { break } print(character, terminator: " ") }
continue 예시코드에서 continue를 break로 바꿔줬습니다.
결과는 아무것도 print되지 않습니다.
그 이유가 뭘까요?
for-loop에서 가장 처음에 접근한 t가 모음이 아니기때문에 바로 break가 호출됩니다.
호출된 break에 의해서 for-loop가 즉시 종료되기 때문에 그 다음 loop는 실행되지 않습니다.
즉시 종료라고 생각해주시면 이해가 쉽겠네요.
fallthrough
fallthrough는 이후 case의 조건과 관련없이 반드시 이후 case를 실행시킵니다.
let integer = 2 print("\(integer) is a", terminator: " ") switch integer { case 2, 3, 5, 7: print("prime number", terminator: " ") fallthrough default: print("and also an integer") } // 2 is a prime number and also an integer
integer가 2이기 때문에 case 2, 3, 5, 7만 실행되어야하지만,
fallthrough때문에 default가 조건과 관련없이 바로 실행됩니다.
더 쉽게 이해를 돕고자 추가적인 예시를 살펴보겠습니다.
let integer = 2 switch integer { case 2: print(2, terminator: " ") fallthrough case 3: print(3) default: print("integer") } // 2 3
위 코드의 경우 2 3 이 출력됩니다.
let integer = 2 switch integer { case 2: print(2, terminator: " ") fallthrough case 3: print(3, terminator: " ") fallthrough default: print("integer") } // 2 3 integer
위 코드의 경우 2 3 integer가 출력됩니다.
이제 이해가 쉽게 되시죠?
Label Statement
Label Statement는 원하는 Label을 붙여서 코드 흐름을 제어하는 기능입니다.
약간 헷갈릴 수 있지만 예시 코드를 천천히 살펴보면 어렵지 않습니다.
outside: for i in 1...3 { print("outside #\(i)") for j in 1...3 { print(j) break outside } } /* outside #1 1 */
이런식으로 원하는 문장(코드) 앞에 Label을 붙여줍니다.
위 코드의 경우 바깥 for-loop에 outside라는 Label을 붙여준 코드입니다.
실행결과는 내부 for-loop를 한 번 실행하자마자 outside를 종료하기 때문에
outside #1과 1을 출력한 뒤에 전체 loop가 종료됩니다.
기존과 같이 그냥 break만 썼을 때는 결과가 어땠을까요?
outside: for i in 1...3 { print("outside #\(i)") for j in 1...3 { print(j) break } } /* outside #1 1 outside #2 1 outside #3 1 */
짠~ 완전히 다른 결과를 볼 수 있습니다.
이런식으로 원하는 제어문의 흐름을 제어하고자 할 때 Label을 활용하면 쉽게 가능합니다.
guard
Early Exit이라고 부르며 특정 조건을 만족하지 않을 때 이후 코드를 실행하지 않도록 방어로직을 작성할 때 사용합니다.
func printEvenNumber(_ number: Int) { guard number % 2 == 0 else { return } print(number, terminator: " ") } for num in 1...10 { printEvenNumber(num) } // 2 4 6 8 10
이런식으로 조건을 걸어서 조건이 만족하지 않는 경우에는 바로 함수를 return할 수 있습니다.
끗!
오늘은 여기까지:)
드디어 제어문을 모두 살펴봤습니다.
다음 시간에는 함수와 함께 돌아오겠습니다.
반응형'Swift 기초문법' 카테고리의 다른 글
[레인스톤 iOS] 스위프트 easy하게 배워볼까? - 제어문(2) (0) 2022.03.12 [레인스톤 iOS] 스위프트 easy하게 배워볼까? - 제어문(1) (0) 2022.02.18 [레인스톤 iOS] 스위프트 easy하게 배워볼까? - 콜렉션 타입(2) (0) 2022.02.15 [레인스톤 iOS] 스위프트 easy하게 배워볼까? - 콜렉션 타입(1) (0) 2022.02.12 [레인스톤 iOS] 스위프트 easy하게 배워볼까? - 문자열과 문자(3) (0) 2022.02.10