2025/07/05

Swift의 흐름 제어: 조건문(if, switch)과 반복문(for, while) 완전 정복

 이전 블로그(Swift 시작하기: 변수, 상수, 그리고 데이터 타입의 모든 것)에는 변수, 상수, 데이터 타입이라는 Swift의 기본적인 요소들을 알아보며 프로그램이 데이터를 어떻게 저장하고 다루는지 이해했습니다.

오늘은 이어서, 프로그램이 특정 조건에 따라 다르게 동작하거나, 특정 작업을 여러 번 반복하도록 만드는, 흐름 제어(Control Flow)에 대해 깊이 파고들 것입니다. 특히 조건문(if, switch)과 반복문(for, while)은 어떤 프로그래밍 언어에서든 핵심 중의 핵심이니, 오늘 내용을 잘 익혀두시면 Swift로 더욱 강력한 앱을 만들 수 있습니다.



1. 조건문 (Conditional Statements): 프로그램의 의사 결정자

조건문은 특정 조건이 만족 되었을 때, 즉 참(true)일 때만 특정 코드 블록을 실행하도록 하여, 프로그램이 두가지 다양한 상황에 맞춰 다르게 반응할 수 있도록 만듭니다.

Swift에서는 주로 if 문과 switch 문을 사용합니다.

1.1. if 문: '만약 ~라면' 실행되는 코드


if 문은 가장 기본적인 조건문으로, 하나의 조건 또는 여러 조건을 순차적으로 검사할 때 사용합니다.

  • if: 주어진 조건이 true일 때 코드를 실행합니다.
  • else if: 첫 번째 if 조건이 false이고, 이어서 다른 조건을 검사할 때 사용합니다. 여러 개를 연결할 수 있습니다.
  • else: 위의 모든 if 또는 else if 조건들이 false일 때 최종적으로 실행되는 코드 블록입니다.
처음 접하시는 분들은 힘들수도 있는데, 각 조건들에 대해서 다르게 동작하게 만드는 것이 조건문입니다.
이 조건을 만들 때는  MECE의 경우가 되도록, 서로 겹치는 부분이 없지만 모든 부분을 커버하도록 만들어야 합니다. 음.. 그냥 만들 때는 대충 만들어도 되는데, 나중에 커버되지 않는 부분이 문제를 일으키죠. 그래서, 모든 부분을 커버하도록 만들어야 해요.


//예제
let temperature = 20 //temperature가 20일 경우에 아래 내용을 보면.
if temperature < 0 {print("날씨가 매우 추워요. 옷을 두껍게 입으세요!")
 } else if temperature >= 0 && temperature < 15 {
    print("날씨가 쌀쌀애요. 가벼운 외투를 챙기세요.")
} else if temperature >= 15 && temperature < 25 {
    print("날씨가 쾌적해요. 산책하기 좋은 날씨네요!")
} else {
    print("날씨가 더워요. 시원한 옷차림을 추천합니다.")
}
//위 4가지의 모든 경우를 커버합니다.

//출력 : 날씨가 쾌적해요. 산책하기 좋은 날씨네요!



이 예시에서 온도(temperature) 값에 따라 다른 메시지를 출력합니다.
위 예시는 온도의 모든 영역을 커버햐죠. MECE를 만족하고 있습니다.

1.2. switch 문: 다양한 경우의 수를 깔끔하게 처리

switch 문은 하나의 값(또는 표현식)을 여러 가능한 경우의 수(case)와 비교하여, 일치하는 case의 코드를 실행합니다. if 문보다 훨씬 더 깔끔하고 명확하게 복잡한 조건을 처리할 수 있습니다. Swift의 switch 문은 모든 가능한 경우의 수를 반드시 처리해야 하는 포괄성(Exhaustiveness) 원칙을 따릅니다.
  • case: 특정 값 또는 패턴과 일치하는 경우를 정의합니다.
  • default: 위의 모든 case에 해당하지 않을 때 실행되는 코드 블록입니다. switch 문이 모든 가능한 값을 처리하지 못할 경우 반드시 필요합니다.
//예제
let dayOfWeek = "Wednesday" //수요일
switch dayOfWeek {case "Monday":
    print("한 주의 시작, 월요일입니다.")
case "Tuesday", "Wednesday", "Thursday": // 여러 값 동시 처리
    print("주중입니다. 열심히 일할 시간!")
case "Friday":
    print("불타는 금요일! 주말이 다가옵니다.")
case "Saturday", "Sunday":
    print("즐거운 주말입니다!")
default: // 위의 어떤 경우에도 해당하지 않을 때
    print("알 수 없는 요일입니다.")
}

// 출력: 주중입니다. 열심히 일할 시간!

switch 문은 값 바인딩(let value), where 절 (case someValue where condition), 그리고 튜플 매칭 등 고급 패턴 매칭도 지원하여 매우 강력하게 활용될 수 있습니다.


2. 반복문 (Loop Statements): 작업 자동화의 핵심

반복문은 특정 코드 블록을 여러 번 반복해서 실행할 때 사용합니다. 동일한 작업을 여러 번 수행해야 할 때 코드를 효율적으로 작성할 수 있도록 돕습니다. Swift에서는 주로 for-in 문과 while 문을 사용합니다.

2.1. for-in 문: 특정 범위 또는 컬렉션을 순회하며 반복

for-in 문은 시퀀스(예: 숫자 범위, 배열, 문자열의 문자 등)의 각 항목에 대해 코드 블록을 실행합니다. 특정 횟수만큼 반복하거나 컬렉션의 모든 요소를 처리할 때 유용합니다.


for문 예제 1.
// 1부터 5까지 숫자 반복 (Closed Range Operator: ...)
print("1부터 5까지 세기:")
for i in 1...5 {
    print(i)
}
// 출력:
// 1
// 2
// 3
// 4
// 5
for문 예제 2.
// 배열의 모든 요소 반복
let fruits = ["사과", "바나나", "체리"]
print("\n내가 좋아하는 과일:")
for fruit in fruits {
    print(fruit)
}
// 출력:
// 사과
// 바나나
// 체리
for문 예제 3.
// 문자열의 각 문자 반복
let greeting = "Hello"
print("\n인사말의 각 문자:")
for char in greeting {
    print(char)
}
// 출력:
// H
// e
// l
// l
// o

2.2. while 문: 조건이 참(true)인 동안 반복

while 문은 특정 조건이 true인 동안 코드 블록을 계속해서 반복 실행합니다. 언제 반복을 멈출지 명확한 횟수를 모를 때 유용합니다.
  • while: 조건이 true인 동안 코드를 반복합니다. 반복에 진입하기 전에 조건을 먼저 검사합니다.
  • repeat-while: 코드 블록을 최소 한 번 실행한 후 조건을 검사하여 반복 여부를 결정합니다.

// while 문 예시

var countdown = 5
print("카운트다운 시작:")
while countdown > 0 {
    print(countdown)
    countdown -= 1 // 1씩 감소
}
print("발사!")
// 출력:
// 5
// 4
// 3
// 2
// 1
// 발사!
// repeat-while 문 예시 (최소 한 번 실행 보장)
var counter = 0
repeat {
    print("현재 카운터 값: \(counter)")
    counter += 1
} while counter < 3
// 출력:
// 현재 카운터 값: 0
// 현재 카운터 값: 1
// 현재 카운터 값: 2


정리하며

오늘은 Swift 프로그래밍에서 코드의 실행 흐름을 제어하는 강력한 도구인 조건문(if, switch)과 반복문(for-in, while, repeat-while)에 대해 자세히 살펴봤습니다.

  • 조건문: 프로그램이 특정 상황에 따라 다른 행동을 취하도록 if와 switch를 사용하여 논리적인 의사 결정을 할 수 있습니다.
  • 반복문: 동일한 작업을 효율적으로 여러 번 수행하도록 for-in, while, repeat-while을 사용하여 자동화를 구현할 수 있습니다.

이러한 흐름 제어 구문들은 모든 복잡한 소프트웨어의 근간을 이룹니다. 

오늘 배운 내용을 바탕으로 다양한 조건과 반복 상황을 직접 구현해 보면서 Swift 프로그래밍에 대한 감각을 키워보세요!

다음 블로그에는 Swift의 코드 재사용성과 모듈화를 높여주는 중요한 개념인 함수와 클로저에 대해 알아보겠습니다.

제가 잘못 정리했거나, 궁금한 점이 있다면 언제든지 댓글로 남겨주십시오. 감사합니다.


댓글 없음:

댓글 쓰기

Swift 옵셔널(Optional): nil 안전하게 다루는 법

지난 블로그에는 코드의 재사용성을 높여주는 함수와 클로저 에 대해 알아보았습니다.  오늘은 Swift의 가장 독특하고 강력한 기능 중 하나이자, 여러분의 앱을 훨씬 더 안정적으로 만들어 줄 옵셔널(Optional) 에 대해 자세히 살펴보겠습니다. ...