while 반복문 활용하기

Tasker_Jang·2026년 2월 8일

들어가며

for 반복문은 반복 횟수가 정해져 있을 때 유용했습니다. 하지만 "사용자가 특정 명령을 입력할 때까지", "목표 값에 도달할 때까지"처럼 반복 횟수를 미리 알 수 없는 경우도 많습니다. 이럴 때 사용하는 것이 바로 while 반복문입니다.

for vs while

특징for 반복문while 반복문
사용 시기반복 횟수가 정해진 경우조건이 참인 동안 반복
제어 방식시퀀스나 range로 자동 제어조건식으로 제어
종료 조건시퀀스가 끝나면 자동 종료조건이 거짓이 되면 종료
예시"10번 반복", "리스트 순회""사용자가 quit 입력할 때까지"

같은 작업, 다른 방식

# for 반복문: 5번 반복
for i in range(5):
    print(i)

# while 반복문: 5번 반복
i = 0
while i < 5:
    print(i)
    i += 1

두 코드 모두 0부터 4까지 출력하지만, while조건식변화식을 직접 관리해야 합니다.

while 반복문 기본 문법

while 조건식:
    반복할_코드
    변화식

핵심 요소:
1. 조건식: 참/거짓을 판단하는 표현식
2. 반복할 코드: 조건이 참일 때 실행할 코드
3. 변화식: 조건식에 영향을 주는 코드 (무한 루프 방지)

기본 구조

초기식
while 조건식:
    반복할_코드
    변화식

예시:

# 초기식: i를 0으로 설정
i = 0

# 조건식: i가 5보다 작을 때
while i < 5:
    # 반복할 코드
    print(i)
    
    # 변화식: i를 1씩 증가
    i += 1

실행 결과:

0
1
2
3
4

while 반복문의 동작 원리

실행 흐름

i = 0
while i < 5:
    print(i)
    i += 1

단계별 흐름:

1. i = 0 (초기식)
2. i < 5 조건 확인 → 0 < 5 → True → 코드 실행
   - print(0)
   - i += 1 → i는 1
3. i < 5 조건 확인 → 1 < 5 → True → 코드 실행
   - print(1)
   - i += 1 → i는 2
4. i < 5 조건 확인 → 2 < 5 → True → 코드 실행
   - print(2)
   - i += 1 → i는 3
5. i < 5 조건 확인 → 3 < 5 → True → 코드 실행
   - print(3)
   - i += 1 → i는 4
6. i < 5 조건 확인 → 4 < 5 → True → 코드 실행
   - print(4)
   - i += 1 → i는 5
7. i < 5 조건 확인 → 5 < 5 → False → 반복 종료

루프(Loop)의 순환

조건식 → 반복할 코드 및 변화식 → 조건식으로 순환하는 부분이 루프입니다.

    ┌─────────────────┐
    │   조건식 확인    │
    └────┬────────────┘
         │ True
         ↓
    ┌─────────────────┐
    │  반복할 코드     │
    └────┬────────────┘
         │
         ↓
    ┌─────────────────┐
    │    변화식        │
    └────┬────────────┘
         │
         └──→ (다시 조건식으로)

while 반복문 기본 규칙

1. 조건식과 콜론

조건식 끝에 콜론(:) 필수입니다.

# 올바른 예
while i < 5:
    print(i)

# 잘못된 예
while i < 5  # SyntaxError: 콜론 누락
    print(i)

2. 들여쓰기

while 다음 줄은 반드시 들여쓰기 4칸입니다.

# 올바른 예
i = 0
while i < 3:
    print(i)
    i += 1

# 잘못된 예
i = 0
while i < 3:
print(i)  # IndentationError
i += 1

3. 조건이 참일 때 반복

while은 조건식이 참(True)일 때 반복하고, 거짓(False)일 때 종료합니다.

i = 0
while i < 3:  # i가 3보다 작을 때만 반복
    print(i)
    i += 1

# i가 3이 되면 조건이 거짓 → 종료
print('반복 종료')

실행 결과:

0
1
2
반복 종료

변화식의 중요성

변화식 없으면 무한 루프!

# 위험! 무한 루프
i = 0
while i < 5:
    print(i)
    # i += 1 없음 → i가 항상 0 → 조건이 항상 참 → 무한 반복!

결과: 프로그램이 멈추지 않고 0을 계속 출력합니다. Ctrl + C로 강제 종료해야 합니다.

변화식 위치

변화식은 보통 반복 코드 끝에 위치합니다.

i = 0
while i < 5:
    print(i)  # 먼저 출력
    i += 1    # 그 다음 증가

하지만 상황에 따라 앞에 올 수도 있습니다.

i = 0
while i < 5:
    i += 1    # 먼저 증가
    print(i)  # 그 다음 출력

실행 결과 (1부터 5까지):

1
2
3
4
5

다양한 조건식

비교 연산자

# <, >, <=, >=, ==, !=
count = 10
while count > 0:
    print(count)
    count -= 1
print('발사! 🚀')

실행 결과:

10
9
8
7
6
5
4
3
2
1
발사! 🚀

논리 연산자

x = 0
y = 10

while x < 5 and y > 0:
    print(f'x={x}, y={y}')
    x += 1
    y -= 2

실행 결과:

x=0, y=10
x=1, y=8
x=2, y=6
x=3, y=4
x=4, y=2

불 값 직접 사용

is_running = True
count = 0

while is_running:
    print(count)
    count += 1
    
    if count >= 3:
        is_running = False

print('종료')

실행 결과:

0
1
2
종료

실전 예제

1. 사용자 입력 반복

password = ''

while password != 'python':
    password = input('비밀번호를 입력하세요: ')

print('로그인 성공!')

실행 과정:

비밀번호를 입력하세요: 123
비밀번호를 입력하세요: abc
비밀번호를 입력하세요: python
로그인 성공!

2. 합계 계산

# 1부터 100까지의 합
total = 0
i = 1

while i <= 100:
    total += i
    i += 1

print(f'1부터 100까지의 합: {total}')
# 1부터 100까지의 합: 5050

3. 메뉴 시스템

choice = ''

while choice != 'q':
    print('\n=== 메뉴 ===')
    print('1. 조회')
    print('2. 추가')
    print('3. 삭제')
    print('q. 종료')
    
    choice = input('선택: ')
    
    if choice == '1':
        print('조회 기능')
    elif choice == '2':
        print('추가 기능')
    elif choice == '3':
        print('삭제 기능')
    elif choice == 'q':
        print('프로그램을 종료합니다')
    else:
        print('잘못된 입력입니다')

4. 숫자 맞추기 게임

import random

answer = random.randint(1, 100)
guess = 0

print('1부터 100 사이의 숫자를 맞춰보세요!')

while guess != answer:
    guess = int(input('숫자 입력: '))
    
    if guess < answer:
        print('더 큰 숫자입니다')
    elif guess > answer:
        print('더 작은 숫자입니다')
    else:
        print('정답입니다!')

5. 계좌 잔액 관리

balance = 10000

while True:
    print(f'\n현재 잔액: {balance}원')
    print('1. 입금  2. 출금  3. 종료')
    
    choice = input('선택: ')
    
    if choice == '1':
        amount = int(input('입금액: '))
        balance += amount
        print(f'{amount}원 입금되었습니다')
    elif choice == '2':
        amount = int(input('출금액: '))
        if amount <= balance:
            balance -= amount
            print(f'{amount}원 출금되었습니다')
        else:
            print('잔액이 부족합니다')
    elif choice == '3':
        print('프로그램을 종료합니다')
        break
    else:
        print('잘못된 입력입니다')

break: 반복 강제 종료

break는 반복문을 즉시 종료하고 빠져나갑니다.

i = 0

while True:  # 무한 루프
    print(i)
    i += 1
    
    if i >= 5:
        break  # i가 5가 되면 종료

print('반복 종료')

실행 결과:

0
1
2
3
4
반복 종료

실용 예제: 검색

numbers = [10, 20, 30, 40, 50]
target = 30
found = False
i = 0

while i < len(numbers):
    if numbers[i] == target:
        print(f'{target}을(를) 인덱스 {i}에서 찾았습니다')
        found = True
        break  # 찾았으면 더 이상 검색 불필요
    i += 1

if not found:
    print(f'{target}을(를) 찾지 못했습니다')

continue: 현재 반복 건너뛰기

continue현재 반복을 건너뛰고 다음 반복으로 이동합니다.

i = 0

while i < 5:
    i += 1  # 주의: continue 전에 증가!
    
    if i == 3:
        continue  # i가 3이면 아래 코드 건너뛰기
    
    print(i)

실행 결과:

1
2
4
5

3이 출력되지 않았습니다!

주의: 변화식 위치

continue 사용 시 변화식을 continue 전에 두어야 무한 루프를 방지할 수 있습니다.

# 잘못된 예 - 무한 루프!
i = 0
while i < 5:
    if i == 3:
        continue  # i가 3일 때 아래 i += 1을 건너뛰어 무한 루프
    print(i)
    i += 1

# 올바른 예
i = 0
while i < 5:
    i += 1  # continue 전에 증가
    if i == 3:
        continue
    print(i)

실용 예제: 짝수만 출력

i = 0

while i < 10:
    i += 1
    
    if i % 2 != 0:  # 홀수면
        continue    # 건너뛰기
    
    print(i)  # 짝수만 출력

실행 결과:

2
4
6
8
10

무한 루프 (Infinite Loop)

while True

while True의도적인 무한 루프를 만들 때 사용합니다. break로 빠져나옵니다.

while True:
    command = input('명령어 입력 (quit=종료): ')
    
    if command == 'quit':
        print('프로그램을 종료합니다')
        break
    
    print(f'입력한 명령어: {command}')

서버 프로그램 패턴

# 서버는 계속 실행되어야 함
while True:
    # 클라이언트 요청 대기
    request = wait_for_request()
    
    # 요청 처리
    process_request(request)
    
    # 종료 신호가 오면 break
    if shutdown_signal:
        break

중첩 while 반복문

while 안에 또 다른 while을 넣을 수 있습니다.

i = 0

while i < 3:
    print(f'i = {i}')
    
    j = 0
    while j < 2:
        print(f'  j = {j}')
        j += 1
    
    i += 1

실행 결과:

i = 0
  j = 0
  j = 1
i = 1
  j = 0
  j = 1
i = 2
  j = 0
  j = 1

while vs for: 언제 무엇을 사용할까?

for를 사용하는 경우

# ✅ 횟수가 정해진 경우
for i in range(10):
    print(i)

# ✅ 시퀀스 순회
for item in items:
    process(item)

# ✅ 명확한 시작과 끝
for i in range(1, 101):
    total += i

while을 사용하는 경우

# ✅ 조건 기반 반복
while not found:
    search_next()

# ✅ 사용자 입력 반복
while password != correct:
    password = input()

# ✅ 무한 루프 (서버, 게임 등)
while True:
    handle_event()

흔한 실수와 해결

실수 1: 변화식 누락 (무한 루프)

# 잘못된 코드
i = 0
while i < 5:
    print(i)
    # i += 1 누락 → 무한 루프!

# 올바른 코드
i = 0
while i < 5:
    print(i)
    i += 1

실수 2: 조건식 오류

# 잘못된 코드 (실행되지 않음)
i = 10
while i < 5:  # 처음부터 거짓
    print(i)
    i += 1

# 올바른 코드
i = 0
while i < 5:
    print(i)
    i += 1

실수 3: continue와 변화식 순서

# 잘못된 코드 (무한 루프)
i = 0
while i < 5:
    if i == 3:
        continue  # i += 1을 건너뛰어 무한 루프
    print(i)
    i += 1

# 올바른 코드
i = 0
while i < 5:
    i += 1  # continue 전에 증가
    if i == 3:
        continue
    print(i)
profile
ML Engineer 🧠 | AI 모델 개발과 최적화 경험을 기록하며 성장하는 개발자 🚀 The light that burns twice as bright burns half as long ✨

0개의 댓글