Swift 루프 — while, repeat, 언제 사용해야 할까? 🔄
출처: Dev.to
지난 글에서는 for 루프에 대해 다뤘습니다 — 반복 횟수를 정확히 알 때 딱 맞는 루프죠. 그런데 반복 횟수를 모를 때는 어떻게 할까요?
그때 등장하는 것이 while와 repeat 루프입니다. 🧠
🔄 While 루프 — 조건이 false가 될 때까지 실행
while 루프는 조건이 true인 동안 계속 실행됩니다. 조건이 false가 되는 순간 루프가 멈춥니다:
while someCondition {
// code to repeat
}
배열도 필요 없고, 범위도 필요 없습니다. 오직 조건만 있으면 됩니다. 실제 예시를 보세요:
var countdown = 10
while countdown > 0 {
print("\(countdown)...")
countdown -= 1
}
print("Blast off! 🚀")
출력
10...
9...
8...
7...
6...
5...
4...
3...
2...
1...
Blast off! 🚀
핵심 정리
countdown = 10으로 시작합니다.- 루프는 매 반복마다 먼저
countdown > 0을 검사합니다. - 루프 안에서는 숫자를 출력하고 1씩 감소시킵니다.
countdown이 0이 되면 조건이 false가 되어 루프가 종료됩니다.- 마지막 메시지는 루프가 끝난 뒤에 출력됩니다.
🎲 무작위 숫자 + While 루프 — 완벽한 조합
while 루프가 진가를 발휘하는 순간은 바로 반복 횟수를 전혀 알 수 없을 때입니다.
Swift에는 범위 내에서 무작위 숫자를 생성해 주는 random(in:)라는 멋진 도구가 있습니다:
let id = Int.random(in: 1...1000) // 1부터 1000 사이의 무작위 정수
let amount = Double.random(in: 0...1) // 0부터 1 사이의 무작위 실수
이제 이를 while 루프와 결합해 보겠습니다. 예를 들어, 20면체 주사위를 굴려서 20이 나올 때까지 반복한다면:
var roll = 0
while roll != 20 {
roll = Int.random(in: 1...20)
print("Rolled: \(roll)")
}
print("Critical hit! ⚔️")
출력 (매번 다르게 나타납니다)
Rolled: 7
Rolled: 13
Rolled: 4
Rolled: 19
Rolled: 20
Critical hit! ⚔️
코드를 실행할 때마다 결과가 달라집니다 — 운이 좋을 수도, 그렇지 않을 수도 있죠. for 루프로는 이런 상황을 깔끔하게 구현하기 어렵습니다. 왜냐면 몇 번 굴려야 할지 미리 알 수 없기 때문이죠. 바로 while 루프가 필요한 이유입니다. 🎯
🎮 다른 예시 — 파워업을 위한 연습
RPG를 만든다고 가정해 봅시다. 캐릭터가 파워 레벨이 9000에 도달할 때까지 계속 훈련해야 한다면:
var powerLevel = 1
var trainingRounds = 0
while powerLevel < 9000 {
powerLevel += Int.random(in: 1...100)
trainingRounds += 1
print("Round \(trainingRounds): Power is now \(powerLevel)")
}
print("Reached 9000 power after \(trainingRounds) rounds!")
⚔️ 전투 시뮬레이션 예시
var health = 100
var bossHealth = 250
var round = 1
while health > 0 && bossHealth > 0 {
let playerDamage = Int.random(in: 10...30)
let bossDamage = Int.random(in: 5...20)
bossHealth -= playerDamage
health -= bossDamage
print("Round \(round):")
print(" You dealt \(playerDamage) — Boss health: \(max(0, bossHealth))")
print(" Boss dealt \(bossDamage) — Your health: \(max(0, health))")
print()
round += 1
}
if health > 0 {
print("🏆 You won in \(round - 1) rounds!")
} else {
print("💀 Defeated in \(round - 1) rounds. Try again!")
}
// Repeat 루프 — 중복되지 않는 보상 코드를 생성
let usedCodes = [1111, 2222, 3333]
var rewardCode: Int
repeat {
rewardCode = Int.random(in: 1000...9999)
} while usedCodes.contains(rewardCode)
print("🎁 Your reward code: \(rewardCode)")
🌟 정리
이제 Swift의 세 가지 루프를 모두 알게 되었습니다:
for— 반복 횟수를 정확히 알 때while— 조건이 false가 될 때까지 반복, 반복 전에 조건을 검사repeat— 최소 한 번은 실행해야 할 때, 반복 후에 조건을 검사
그리고 항상 기억하세요: while이나 repeat 조건이 결국 false가 되도록 설계하지 않으면 무한 루프에 빠질 수 있습니다! 🔒
다음 글에서는 continue와 break를 사용해 루프를 건너뛰거나 조기에 종료하는 방법을 살펴보겠습니다. 곧 다시 만나요! 👋