Swift는 다양한 Control Flow(흐름 제어) statements를 제공한다.
프로그램을 작성하다보면,
특정 조건에서만 코드를 실행하거나 또는 실행하지 말아야하거나 하는 경우가 있다.
또 어떤 경우에는 특정 코드나 명령어를 반복해야하는 경우도 있다.
이런 경우에 사용하는 것이 바로 조건문과 반복문이다.
이런 것들을 이제 흐름 제어라고 한다.
그럼 조건문부터 하나씩 살펴보자.
conditional이라고 오랜만에 쓰니까
어학연수 다닐때 zero conditional, 1st conditional 배운게 생각난다.
아무튼,, conditional은 조건문이다.
영어에서는 if 문을 배울때, conditional + result 라고 쓰라고 배우지 않는가.
그거랑 같다.
Swift에서 조건문은 if, switch 그리고 guard가 있다.
순서대로 봐보자.
if는 정말 대표적인 조건문이다.
영어에서도 배우니까 되게 친숙한 말이기도 하다.
if문은 if와 else로 이루어지는데 기본적인 구조는 다음과 같다.
if 조건1 {
조건1에서 수행할 코드
}
else if 조건2 {
조건2에서 수행할 코드
}
else if 조건3 {
조건3에서 수행할 코드
}
else {
그 외 조건에서 수행할 코드
}
else나 else if 없이 if만 단독으로 써도 된다.
괄호는 써도되고 안써도 된다.
안쓰니까 더 간단해보이기도 하는데,
막상 안쓰려니까 좀 헷갈린다.
예제도 하나 보자.
값이 2인 경우 값이 참이라는 문장을 출력하는 예제이다.
💻 입력
import UIKit
var value = 2
if (value == 2) { // 이렇게 조건에 괄호를 써도 됨
print("value is true")
}
else if value == 1 { // 이렇게 조건에 괄호를 안써도 됨
print("value is false")
}
else {
print("value is value")
}
📄 출력
value is true
switch도 조건에 괄호를 안써도 된다.
Swift의 경우, case 내부의 코드를 모두 실행하면 break 없이도 switch 구문이 종료된다.
따라서 break문을 쓰지 않고 case를 연속 실행할 수 없다.
만약 case를 연속 실행하려면, fallthrough 키워드를 사용해야 한다.
Swift의 switch 문에서 주의해야할 점들이 있다.
다음과 같다.
- 정수 타입 뿐만 아니라, 다양한 값이 조건에 들어갈 수 있다.
- case에 들어갈 비교 값은 입력 값과 데이터 타입이 같아야 한다.
- 비교될 값이 한정적인 값(열거값 등)이 아니라면, default를 꼭 작성해야 한다.
- 각 case에는 범위 연산자를 사용할 수 있다.
- 각 case에는 where 절을 사용하여 조건을 확장할 수도 있다.
기본 구조는 다음과 같다.
switch 입력값 {
case 비교값1:
실행 구문
case 비교값2, 비교값3: // 한번에 여러개랑 비교도 가능
실행 구문
case 비교값4:
실행 구문
break // break를 통한 종료는 선택사항
default:
실행 구문
}
예제를 통해 어떻게 사용하는지 보도록 하자.
💻 입력
import UIKit
var value = 2
switch value {
case 0:
print("zero")
case 1...19:
print("hello")
fallthrough // switch 문을 계속
case 2...20:
print("world")
break
default: // 한정된 범위가 없다면 반드시 default 필요
print("value between 0 to 20")
}
📄 출력
hello
world
case 비교값: 이 안에 코드가 없는 경우 오류가 발생한다.
따라서 꼭 case의 안에는 실행될 코드가 와야 합니다.
switch 구문의 입력값으로 tuple을 주어도 된다.
📄 입력
import UIKit
var person: (String, Int) = ("Vina", 23)
switch person {
case ("Vina", 23):
print("You know her exactly")
case ("Vina", _):
print("You know her name !!")
case (_, 23):
print("You know her age !!")
default:
print("You do not know her")
}
💻 출력
You know her exactly
위의 예제 중 case ("Vina", _): 또는 case (_, 23): 와 같이
언더바(_)로 이 안의 값은 무엇이 오더라도 상관하지 않도록 할 수 있습니다.
반복문은 말 그대로 반복하는 문장이다.
어떠한 코드를 특정 기준 만큼 반복하여 수행해야 한다면, 반복문을 쓰는 것이 좋다.
Swift에서 반복문은 다른 프로그래밍 언어들과 마찬가지로 for, while이 있다.
그런데 Swift는 do-while 구문이 아니라, repeat-while 구문으로 구현된다.
먼저 for-in 반복 구문이다.
반복적인 데이터 또는 시퀀스를 다루는 경우에 많이 사용한다.
continue, break 등의 제어 키워드 사용이 가능하다.
일단 쓰는 방법은 아래와 같다.
for 임시 상수 in 시퀀스 아이템 {
실행 코드
}
먼저 제일 간단한 예제로 어떻게 쓰는지 보자.
📄 입력
import UIKit
for i in 0...2 {
print(i)
}
💻 출력
0
1
2
간단간단 예제였다..
다음은 딕셔너리에 for-in 구문을 사용한 예시이다.
딕셔너리는 넘겨받는 값의 타입이 튜플로 지정되어 넘어온다.
📄 입력
import UIKit
var people: [String: Int] = ["Mei": 23, "Vina": 23, "Jojo": 25]
for tuple in people {
print(tuple)
}
💻 출력
(key: "Jojo", value: 25)
(key: "Mei", value: 23)
(key: "Vina", value: 23)
while도 다른 프로그래밍 언어와 유사하다.
for-in 구문과 마찬가지로 continue, break 등의 제어 키워드 사용이 가능하다.
바로 예제를 살펴보자.
배열의 값을 삭제하며 출력하는 while문은 다음과 같이 쓸 수 있다.
📄 입력
import UIKit
var graduatePeople: [String] = ["Mei", "Vina", "Jojo"]
while graduatePeople.isEmpty == false {
print("Congrats \(graduatePeople.removeFirst())")
}
💻 출력
Congrats Mei
Congrats Vina
Congrats Jojo
repeat-while 구문은 다른 프로그래밍 언어의 do-while 구문과 크게 다르지 않다.
repeat 내의 코드를 최소 1회 실행하고, while 내의 조건이 성립하면 블록 내부의 코드를 반복한다.
다음 예제를 보자.
📄 입력
import UIKit
var graduatePeople: [String] = ["Mei", "Vina", "Jojo"]
repeat {
print("Congrats \(graduatePeople.removeFirst())")
} while graduatePeople.isEmpty == false
💻 출력
Congrats Mei
Congrats Vina
Congrats Jojo
반복문을 사용하다보면, 중첩으로 반복문을 작성하는 경우가 있다.
이런 경우 break, continue와 같은 키워드를 어디에 적용할지 애매하거나,
큰 범위의 반복문을 종료하고 싶은데 작은 범위의 반복문만 종료되는 등의 상황이 발생할 수 있다.
이런 경우 반복문 앞에 이름과 함께 콜론을 붙여 Labeled Statements(구문 이름표)를 붙여주면 좋다.
이는 아래 예시와 같이 사용할 수 있다.
만약 for-in 구문의 이름표를 numsLoop라고 붙여주는 경우이다.
numsLoop: for i in 0...5 {
print
if i == 4 {
break numsLoop // 어떤 이름의 Loop에 break를 사용할 것인지 알기 쉽다.
}
}
반복문,, 오랜만에 정리한다,,
Label Statements 잘 쓰면 진짜 좋을 듯 하다. (잘 써보자.)
진짜 이번주에 7 또는 8장까지만 정리해도 성공이긴하다..
나름 하루에 한 장 정도는 정리하고 있다.
근데 사실 주말 하루는 못할 예정이라,, 아무튼 적어도 7장까지는 이번주에 꼭 정리하자.
남은 주도 힘들어도 아자아자 🤍✨