break와 continue로 반복문 제어하기

Tasker_Jang·2026년 2월 8일
post-thumbnail

들어가며

forwhile 반복문으로 코드를 반복 실행할 수 있게 되었습니다. 하지만 때로는 특정 조건에서 반복을 즉시 중단하거나, 특정 경우만 건너뛰고 계속 진행해야 할 때가 있습니다. 이럴 때 사용하는 것이 바로 breakcontinue입니다.

반복문 제어 키워드 비교

키워드기능제어 흐름사용 시기
break반복문 즉시 종료중단목표를 달성했거나 오류 발생 시
continue현재 반복만 건너뛰기유지 (다음 반복으로)특정 조건의 항목만 건너뛸 때

핵심 차이:

  • break: 제어 흐름 중단 → 반복문 완전 종료
  • continue: 제어 흐름 유지, 코드 실행만 건너뜀 → 다음 반복 계속

break: 반복문 즉시 종료

break의 동작

break는 반복문을 즉시 종료하고 반복문 다음 코드로 이동합니다.

for i in range(10):
    if i == 5:
        break  # i가 5일 때 반복문 종료
    print(i)

print('반복문 종료')

실행 결과:

0
1
2
3
4
반복문 종료

흐름:
1. i = 0, 1, 2, 3, 4 → 출력
2. i = 5 → break 실행 → 반복문 즉시 종료
3. "반복문 종료" 출력

for문에서 break

# 특정 값을 찾으면 종료
numbers = [10, 20, 30, 40, 50]

for num in numbers:
    print(f'현재 숫자: {num}')
    if num == 30:
        print('30을 찾았습니다!')
        break
    print('다음 숫자로...')

print('검색 종료')

실행 결과:

현재 숫자: 10
다음 숫자로...
현재 숫자: 20
다음 숫자로...
현재 숫자: 30
30을 찾았습니다!
검색 종료

while문에서 break

# 비밀번호 3번 틀리면 종료
attempts = 0
correct_password = 'python123'

while attempts < 5:
    password = input('비밀번호 입력: ')
    attempts += 1
    
    if password == correct_password:
        print('로그인 성공!')
        break
    else:
        print(f'틀렸습니다. 남은 횟수: {5 - attempts}')

if attempts == 5:
    print('로그인 실패. 계정이 잠겼습니다.')

실행 예시 (2번째에 성공):

비밀번호 입력: wrong1
틀렸습니다. 남은 횟수: 4
비밀번호 입력: python123
로그인 성공!

무한 루프 탈출

while True와 함께 사용하여 조건에 따라 탈출합니다.

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

실행 예시:

명령어 입력 (quit=종료): hello
입력한 명령어: hello
명령어 입력 (quit=종료): test
입력한 명령어: test
명령어 입력 (quit=종료): quit
프로그램을 종료합니다

continue: 현재 반복 건너뛰기

continue의 동작

continue현재 반복의 나머지 코드를 건너뛰고 다음 반복으로 이동합니다.

for i in range(5):
    if i == 2:
        continue  # i가 2일 때 아래 코드 건너뛰기
    print(i)

print('반복문 종료')

실행 결과:

0
1
3
4
반복문 종료

흐름:
1. i = 0 → 출력
2. i = 1 → 출력
3. i = 2 → continue 실행 → print(i) 건너뛰기 → 다음 반복으로
4. i = 3 → 출력
5. i = 4 → 출력
6. 반복문 정상 종료

특정 조건만 처리

# 홀수만 출력
for i in range(10):
    if i % 2 == 0:  # 짝수면
        continue     # 건너뛰기
    print(i)  # 홀수만 출력됨

실행 결과:

1
3
5
7
9

유효성 검사 후 처리

numbers = [10, -5, 20, 0, 30, -10, 40]

for num in numbers:
    if num <= 0:
        print(f'{num}은(는) 유효하지 않아 건너뜁니다')
        continue
    
    # 양수만 처리
    result = 100 / num
    print(f'100 / {num} = {result:.2f}')

실행 결과:

100 / 10 = 10.00
-5은(는) 유효하지 않아 건너뜁니다
100 / 20 = 5.00
0은(는) 유효하지 않아 건너뜁니다
100 / 30 = 3.33
-10은(는) 유효하지 않아 건너뜁니다
100 / 40 = 2.50

break vs continue 시각적 비교

break 예시

for i in range(5):
    print(f'시작: i={i}')
    
    if i == 2:
        print('break 실행!')
        break  # 반복문 완전 종료
    
    print(f'끝: i={i}')

print('--- 반복문 밖 ---')

실행 결과:

시작: i=0
끝: i=0
시작: i=1
끝: i=1
시작: i=2
break 실행!
--- 반복문 밖 ---

흐름도:

i=0 → 시작 → 끝
i=1 → 시작 → 끝
i=2 → 시작 → break → [반복문 종료]
--- 반복문 밖 ---

continue 예시

for i in range(5):
    print(f'시작: i={i}')
    
    if i == 2:
        print('continue 실행!')
        continue  # 현재 반복만 건너뛰기
    
    print(f'끝: i={i}')

print('--- 반복문 밖 ---')

실행 결과:

시작: i=0
끝: i=0
시작: i=1
끝: i=1
시작: i=2
continue 실행!
시작: i=3
끝: i=3
시작: i=4
끝: i=4
--- 반복문 밖 ---

흐름도:

i=0 → 시작 → 끝
i=1 → 시작 → 끝
i=2 → 시작 → continue → [다음 반복으로]
i=3 → 시작 → 끝
i=4 → 시작 → 끝
--- 반복문 밖 ---

while문에서 continue 주의사항

위험: 무한 루프

while에서 continue 사용 시 변화식을 continue 전에 두어야 합니다.

# 잘못된 코드 - 무한 루프!
i = 0
while i < 5:
    if i == 2:
        continue  # i += 1을 건너뛰어 i가 영원히 2
    print(i)
    i += 1  # 실행되지 않음!

올바른 코드:

# 방법 1: continue 전에 증가
i = 0
while i < 5:
    i += 1  # continue 전에 증가!
    
    if i == 2:
        continue
    print(i)

# 방법 2: 조건을 바꾸기
i = 0
while i < 5:
    if i != 2:  # continue 대신 조건 반전
        print(i)
    i += 1

중첩 반복문에서 break와 continue

break는 가장 가까운 반복문만 종료

for i in range(3):
    print(f'바깥 루프: i={i}')
    
    for j in range(3):
        print(f'  안쪽 루프: j={j}')
        
        if j == 1:
            break  # 안쪽 for문만 종료
    
    print(f'바깥 루프 계속: i={i}')

실행 결과:

바깥 루프: i=0
  안쪽 루프: j=0
  안쪽 루프: j=1
바깥 루프 계속: i=0
바깥 루프: i=1
  안쪽 루프: j=0
  안쪽 루프: j=1
바깥 루프 계속: i=1
바깥 루프: i=2
  안쪽 루프: j=0
  안쪽 루프: j=1
바깥 루프 계속: i=2

바깥 반복문까지 종료하려면?

플래그 변수를 사용합니다.

found = False

for i in range(3):
    for j in range(3):
        print(f'i={i}, j={j}')
        
        if i == 1 and j == 1:
            found = True
            break  # 안쪽 루프 종료
    
    if found:
        break  # 바깥 루프 종료

print('검색 완료')

실행 결과:

i=0, j=0
i=0, j=1
i=0, j=2
i=1, j=0
i=1, j=1
검색 완료

실전 예제

1. 리스트에서 특정 값 찾기

numbers = [10, 25, 30, 45, 60, 75]
target = 45
found = False

for i, num in enumerate(numbers):
    if num == target:
        print(f'{target}을(를) 인덱스 {i}에서 찾았습니다')
        found = True
        break

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

실행 결과:

45을(를) 인덱스 3에서 찾았습니다

2. 소수 판별

number = int(input('숫자를 입력하세요: '))

if number < 2:
    print(f'{number}은(는) 소수가 아닙니다')
else:
    is_prime = True
    
    for i in range(2, number):
        if number % i == 0:
            print(f'{number}은(는) {i}로 나누어떨어집니다')
            is_prime = False
            break  # 나누어떨어지면 소수 아님 → 종료
    
    if is_prime:
        print(f'{number}은(는) 소수입니다')
    else:
        print(f'{number}은(는) 소수가 아닙니다')

실행 예시 (입력: 17):

숫자를 입력하세요: 17
17은(는) 소수입니다

실행 예시 (입력: 15):

숫자를 입력하세요: 15
15은(는) 3로 나누어떨어집니다
15은(는) 소수가 아닙니다

3. 양수만 합계 계산

numbers = [10, -5, 20, -10, 30, 0, -3, 40]
total = 0

for num in numbers:
    if num <= 0:
        continue  # 음수와 0은 건너뛰기
    
    total += num

print(f'양수의 합: {total}')
# 양수의 합: 100

4. 유효한 입력 받기

while True:
    age = input('나이를 입력하세요 (1-120): ')
    
    if not age.isdigit():
        print('숫자를 입력해주세요')
        continue
    
    age = int(age)
    
    if age < 1 or age > 120:
        print('올바른 범위의 나이를 입력해주세요')
        continue
    
    # 유효한 입력
    print(f'입력된 나이: {age}세')
    break

5. 파일에서 특정 단어 찾기

lines = [
    'Python is awesome',
    'I love programming',
    'Python is easy to learn',
    'JavaScript is also good'
]

keyword = 'Python'

for line_num, line in enumerate(lines, start=1):
    if keyword not in line:
        continue  # keyword가 없으면 건너뛰기
    
    print(f'{line_num}번째 줄: {line}')

실행 결과:

1번째 줄: Python is awesome
3번째 줄: Python is easy to learn

6. 메뉴 시스템 (break와 continue 함께)

while True:
    print('\n=== 계산기 ===')
    print('1. 덧셈')
    print('2. 뺄셈')
    print('3. 곱셈')
    print('4. 나눗셈')
    print('q. 종료')
    
    choice = input('선택: ')
    
    if choice == 'q':
        print('프로그램을 종료합니다')
        break
    
    if choice not in ['1', '2', '3', '4']:
        print('잘못된 선택입니다')
        continue  # 메뉴 다시 표시
    
    # 숫자 입력
    a = float(input('첫 번째 숫자: '))
    b = float(input('두 번째 숫자: '))
    
    if choice == '1':
        print(f'결과: {a + b}')
    elif choice == '2':
        print(f'결과: {a - b}')
    elif choice == '3':
        print(f'결과: {a * b}')
    elif choice == '4':
        if b == 0:
            print('0으로 나눌 수 없습니다')
            continue
        print(f'결과: {a / b}')

7. 구구단 (특정 단 건너뛰기)

skip_dan = [3, 6]

for dan in range(2, 10):
    if dan in skip_dan:
        print(f'{dan}단은 건너뜁니다')
        continue
    
    print(f'\n[{dan}단]')
    for i in range(1, 10):
        print(f'{dan} x {i} = {dan * i}')

8. 최댓값 찾기 (조기 종료)

numbers = [10, 50, 30, 100, 20, 40]
max_threshold = 80

max_num = numbers[0]

for num in numbers:
    if num > max_num:
        max_num = num
    
    # 임계값 초과 시 조기 종료
    if max_num > max_threshold:
        print(f'임계값({max_threshold})을 초과했습니다')
        break

print(f'최댓값: {max_num}')

실행 결과:

임계값(80)을 초과했습니다
최댓값: 100

break/continue 사용 시 주의사항

1. 과도한 사용 지양

너무 많은 break/continue는 코드 흐름을 복잡하게 만듭니다.

# 나쁜 예 (break/continue 남용)
for i in range(10):
    if i == 2:
        continue
    if i == 5:
        continue
    if i == 8:
        break
    print(i)

# 좋은 예 (조건을 명확하게)
for i in range(8):
    if i not in [2, 5]:
        print(i)

2. 들여쓰기 주의

break/continue가 어느 반복문에 속하는지 명확히 해야 합니다.

for i in range(3):
    for j in range(3):
        if j == 1:
            break  # 안쪽 for문만 종료
    # break는 여기로 이동

3. 조건 단순화

복잡한 조건은 변수로 분리하여 가독성을 높입니다.

# 나쁜 예
for item in items:
    if item.price > 1000 and item.category == 'book' and item.stock > 0:
        continue
    process(item)

# 좋은 예
for item in items:
    is_expensive_book_in_stock = (
        item.price > 1000 and 
        item.category == 'book' and 
        item.stock > 0
    )
    
    if is_expensive_book_in_stock:
        continue
    
    process(item)

else 절과 break

반복문의 else 절은 break 없이 정상 종료되었을 때만 실행됩니다.

for-else

# break 없이 정상 종료
for i in range(5):
    print(i)
else:
    print('정상 종료')
# 0 1 2 3 4 정상 종료

# break로 종료
for i in range(5):
    if i == 3:
        break
    print(i)
else:
    print('정상 종료')  # 실행 안 됨
# 0 1 2

while-else

# break 없이 정상 종료
count = 0
while count < 3:
    print(count)
    count += 1
else:
    print('정상 종료')
# 0 1 2 정상 종료

# break로 종료
count = 0
while count < 5:
    if count == 3:
        break
    print(count)
    count += 1
else:
    print('정상 종료')  # 실행 안 됨
# 0 1 2

실용 예제: 검색 성공/실패 구분

numbers = [10, 20, 30, 40, 50]
target = 35

for num in numbers:
    if num == target:
        print(f'{target}을(를) 찾았습니다')
        break
else:
    print(f'{target}을(를) 찾지 못했습니다')
# 35을(를) 찾지 못했습니다
profile
ML Engineer 🧠 | AI 모델 개발과 최적화 경험을 기록하며 성장하는 개발자 🚀 The light that burns twice as bright burns half as long ✨

0개의 댓글