Swift 루프 — while, repeat, 언제 사용해야 할까? 🔄

발행: (2026년 6월 11일 PM 05:44 GMT+9)
5 분 소요
원문: Dev.to

출처: Dev.to

지난 글에서는 for 루프에 대해 다뤘습니다 — 반복 횟수를 정확히 알 때 딱 맞는 루프죠. 그런데 반복 횟수를 모를 때는 어떻게 할까요?

그때 등장하는 것이 whilerepeat 루프입니다. 🧠


🔄 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가 되도록 설계하지 않으면 무한 루프에 빠질 수 있습니다! 🔒

다음 글에서는 continuebreak를 사용해 루프를 건너뛰거나 조기에 종료하는 방법을 살펴보겠습니다. 곧 다시 만나요! 👋

0 조회
Back to Blog

관련 글

더 보기 »