[Swift] Control Flow

비나·2022년 8월 25일

Swift

목록 보기
6/8
post-thumbnail

📌 Control Flow

Swift는 다양한 Control Flow(흐름 제어) statements를 제공한다.
프로그램을 작성하다보면,
특정 조건에서만 코드를 실행하거나 또는 실행하지 말아야하거나 하는 경우가 있다.
또 어떤 경우에는 특정 코드나 명령어를 반복해야하는 경우도 있다.
이런 경우에 사용하는 것이 바로 조건문과 반복문이다.
이런 것들을 이제 흐름 제어라고 한다.
그럼 조건문부터 하나씩 살펴보자.



📌 Conditional

conditional이라고 오랜만에 쓰니까
어학연수 다닐때 zero conditional, 1st conditional 배운게 생각난다.
아무튼,, conditional은 조건문이다.
영어에서는 if 문을 배울때, conditional + result 라고 쓰라고 배우지 않는가.
그거랑 같다.

Swift에서 조건문은 if, switch 그리고 guard가 있다.
순서대로 봐보자.

✅ if

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

switch도 조건에 괄호를 안써도 된다.
Swift의 경우, case 내부의 코드를 모두 실행하면 break 없이도 switch 구문이 종료된다.
따라서 break문을 쓰지 않고 case를 연속 실행할 수 없다.
만약 case를 연속 실행하려면, fallthrough 키워드를 사용해야 한다.

Swift의 switch 문에서 주의해야할 점들이 있다.
다음과 같다.

  1. 정수 타입 뿐만 아니라, 다양한 값이 조건에 들어갈 수 있다.
  2. case에 들어갈 비교 값은 입력 값과 데이터 타입이 같아야 한다.
  3. 비교될 값이 한정적인 값(열거값 등)이 아니라면, default를 꼭 작성해야 한다.
  4. 각 case에는 범위 연산자를 사용할 수 있다.
  5. 각 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 비교값: 이 안에 코드가 없는 경우 오류가 발생한다.
따라서 꼭 case의 안에는 실행될 코드가 와야 합니다.

📖 Tuple Switch 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): 와 같이
언더바(_)로 이 안의 값은 무엇이 오더라도 상관하지 않도록 할 수 있습니다.



📌 Loop

반복문은 말 그대로 반복하는 문장이다.
어떠한 코드를 특정 기준 만큼 반복하여 수행해야 한다면, 반복문을 쓰는 것이 좋다.
Swift에서 반복문은 다른 프로그래밍 언어들과 마찬가지로 for, while이 있다.
그런데 Swift는 do-while 구문이 아니라, repeat-while 구문으로 구현된다.

✅ for-in

먼저 for-in 반복 구문이다.
반복적인 데이터 또는 시퀀스를 다루는 경우에 많이 사용한다.
continue, break 등의 제어 키워드 사용이 가능하다.

일단 쓰는 방법은 아래와 같다.

for 임시 상수 in 시퀀스 아이템 {
	실행 코드
}

📖 예제 -Int

먼저 제일 간단한 예제로 어떻게 쓰는지 보자.

📄 입력

import UIKit

for i in 0...2 {
    print(i)
}

💻 출력

0
1
2

📖 예제 - Dictionary

간단간단 예제였다..
다음은 딕셔너리에 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

while도 다른 프로그래밍 언어와 유사하다.
for-in 구문과 마찬가지로 continue, break 등의 제어 키워드 사용이 가능하다.

바로 예제를 살펴보자.

📖 예제 - String Array

배열의 값을 삭제하며 출력하는 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

repeat-while 구문은 다른 프로그래밍 언어의 do-while 구문과 크게 다르지 않다.
repeat 내의 코드를 최소 1회 실행하고, while 내의 조건이 성립하면 블록 내부의 코드를 반복한다.

다음 예제를 보자.

📖 예제 - String Array

📄 입력

import UIKit

var graduatePeople: [String] = ["Mei", "Vina", "Jojo"]

repeat {
    print("Congrats \(graduatePeople.removeFirst())")
} while  graduatePeople.isEmpty == false

💻 출력

Congrats Mei
Congrats Vina
Congrats Jojo



📌 Labeled Statements

반복문을 사용하다보면, 중첩으로 반복문을 작성하는 경우가 있다.
이런 경우 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장까지는 이번주에 꼭 정리하자.
남은 주도 힘들어도 아자아자 🤍✨




참고
- 야곰, 『스위프트 프로그래밍 3판』, 한빛미디어, 2021.04
- the swift programming language swift 5.7
- Swift | Apple Developer Documentation
profile
아자아자 코딩라이푸 ٩(๑❛ʚ❛๑)۶

0개의 댓글