
The Swift Programming Language 의 A Swift Tour - Control Flow 를 한국어로 번역하여 정리한 것이며, 오역 및 오타가 있을 수 있습니다.
제어 흐름 (Control Flow)
조건문에는 if 와 switch 를 사용하고 반복문에는 for-in, while, repeat-while 을 사용합니다. 조건식이나 루프 변수에 괄호는 선택 사항입니다. 본문에는 중괄호가 필수입니다.
let individualScores = [75, 43, 103, 87, 12]
var teamScore = 0
for score in individualScores {
if score > 50 {
teamScore += 3
} else {
teamScore += 1
}
}
print(teamScore)
// Prints "11"
if 문에서는 조건이 반드시 Boolean 표현식이어야 합니다. 즉, if score { ... } 와 같은 코드는 오류이며 0 과의 암시적 비교로 간주되지 않습니다.
if 나 switch 를 할당문의 등호(=) 나 return 뒤에 작성하여 조건에 따라 값을 선택할 수 있습니다.
let scoreDecoration = if teamScore > 10 {
"🎉"
} else {
""
}
print("Score:", teamScore, scoreDecoration)
// Prints "Score: 11 🎉"
if 와 let 을 함께 사용하여 누락되었을 수 있는 값들과 함께 작업할 수 있습니다. 이러한 값들은 옵셔널(Optional)로 표현됩니다. 옵셔널 값은 값을 포함하거나, 값이 누락되었음을 나타내는 nil 을 포함합니다. 값의 타입 뒤에 물음표(?)를 붙여 해당 값이 옵셔널임을 표시합니다.
var optionalString: String? = "Hello"
print(optionalString == nil)
// Prints "false"
var optionalName: String? = "John Appleseed"
var greeting = "Hello!"
if let name = optionalName {
greeting = "Hello, \(name)"
}
Experiment
optionalName 을 nil 로 바꿔보세요. 어떤 인사가 출력되나요?
optionalName 이 nil 일 경우 다른 인사를 설정하는 else 절을 추가해 보세요.
옵셔널 값이 nil이면 조건식은 거짓이 되고 중괄호 안의 코드는 건너뜁니다. 그렇지 않으면 옵셔널 값이 해제되어 let 뒤에 지정된 상수에 할당되며 해당 해제된 값은 코드 블록 내부에서 사용할 수 있습니다.
옵셔널 값을 처리하는 또 다른 방법은 ?? 연산자를 사용하여 기본값을 제공하는 것입니다. 옵셔널 값이 없을 경우 기본값이 대신 사용됩니다.
let nickname: String? = nil
let fullName: String = "John Appleseed"
let informalGreeting = "Hi \(nickname ?? fullName)"
값을 언래핑할 때 더 짧은 표기를 사용할 수 있으며 언래핑된 값에 동일한 이름을 사용할 수도 있습니다.
if let nickname {
print("Hey, \(nickname)")
}
// Doesn't print anything, because nickname is nil.
switch 문은 어떤 종류의 데이터도 지원하며 다양한 비교 연산을 사용할 수 있습니다. 정수 및 동등성 검사로 제한되지 않습니다.
let vegetable = "red pepper"
switch vegetable {
case "celery":
print("Add some raisins and make ants on a log.")
case "cucumber", "watercress":
print("That would make a good tea sandwich.")
case let x where x.hasSuffix("pepper"):
print("Is it a spicy \(x)?")
default:
print("Everything tastes good in soup.")
}
// Prints "Is it a spicy red pepper?"
Experiment
default 케이스를 제거해 보세요. 어떤 오류가 발생하나요?
패턴에서 let 을 사용하여 매칭된 값을 상수에 할당할 수 있다는 점에 주목하세요.
매칭된 switch 케이스 내부의 코드가 실행된 후에는 프로그램이 switch 문에서 빠져나옵니다. 다음 케이스로 실행이 이어지지 않기 때문에 각 케이스의 끝에 break 를 명시적으로 작성할 필요가 없습니다.
for-in 을 사용하여 딕셔너리의 항목들을 반복할 수 있습니다. 각 키-값 쌍에 사용할 이름 쌍을 지정합니다. 딕셔너리는 정렬되지 않은 컬렉션이므로 키와 값은 임의의 순서로 반복됩니다.
let interestingNumbers = [
"Prime": [2, 3, 5, 7, 11, 13],
"Fibonacci": [1, 1, 2, 3, 5, 8],
"Square": [1, 4, 9, 16, 25],
]
var largest = 0
for (_, numbers) in interestingNumbers {
for number in numbers {
if number > largest {
largest = number
}
}
}
print(largest)
// Prints "25"
Experiment
_ 를 변수 이름으로 바꾸고, 어떤 종류의 숫자가 가장 큰지를 추적해 보세요.
while 을 사용하여 조건이 바뀔 때까지 코드 블록을 반복 실행합니다. 반복문의 조건이 끝에 위치하면 반복문이 최소 한 번은 실행되도록 보장됩니다.
var n = 2
while n < 100 {
n *= 2
}
print(n)
// Prints "128"
var m = 2
repeat {
m *= 2
} while m < 100
print(m)
// Prints "128"
Experiment
조건을 m < 100 에서 m < 0 으로 바꿔보세요. 반복 조건이 이미 거짓인 경우 while 과 repeat-while 이 어떻게 다르게 동작하는지 확인해 보세요.
..< 연산자를 사용하여 인덱스 범위를 만들어 반복문에서 인덱스를 유지할 수 있습니다.
var total = 0
for i in 0..<4 {
total += i
}
print(total)
// Prints "6"
..< 를 사용하여 상한값을 생략한 범위를 만들고 ... 를 사용하여 양쪽 값을 모두 포함하는 범위를 만들 수 있습니다.
'Languages > Swift' 카테고리의 다른 글
A Swift Tour - Functions and Closures (3) | 2025.07.29 |
---|---|
A Swift Tour - Simple Values (0) | 2025.06.11 |
Version Compatibility (0) | 2025.05.09 |
About Swift (4) | 2025.05.06 |
Dev_Groo 님의 블로그 입니다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!