본문 바로가기
지식을 알아가는 시간 지식을 알아가는 시간

반복문(for문, while문)의 개념과 언제 사용되는지 알아보기

읽는 시간 약 15분

반복 작업을 줄여 주는 반복문

우리가 컴퓨터를 사용하는 이유 중 하나는 단순하고 지루한 반복 작업을 대신 처리해 주기 때문입니다.

만약 1부터 100까지의 숫자를 직접 더해야 하거나, 똑같은 안내 문구를 천 명의 고객에게 일일이 복사해서 보내야 한다면 어떨까요? 시간도 오래 걸리고 실수하기도 쉬울 것입니다. 프로그래밍에서 이런 반복 작업을 짧은 코드로 처리하게 해 주는 도구가 바로 반복문입니다.

초보자가 처음 불편함을 느끼는 순간 중 하나는 똑같은 코드를 여러 번 작성해야 할 때입니다. 예를 들어 화면에 “안녕하세요”라는 인사를 다섯 번 출력하려면 print 명령을 다섯 줄 입력하면 됩니다.

하지만 이 인사를 만 번 출력해야 한다면 어떨까요? 코드를 만 줄 작성하는 것은 비효율적일 뿐만 아니라 수정하기도 매우 어렵습니다. 이럴 때 반복문을 사용하면 몇 줄의 코드만으로 같은 작업을 처리할 수 있습니다.

반복문의 기본 개념과 작동 원리

반복문은 정해진 횟수만큼, 또는 특정한 조건이 만족되는 동안 같은 코드를 계속 실행하도록 지시하는 문법입니다. 일상생활에 비유하면 세탁기가 돌아가는 과정을 떠올릴 수 있습니다.

세탁기는 사용자가 설정한 시간이나 헹굼 횟수가 채워질 때까지 물을 채우고, 통을 돌리고, 물을 빼는 과정을 반복합니다. 프로그래밍의 반복문도 정해진 횟수나 조건이 채워질 때까지 같은 동작을 되풀이한다는 점에서 비슷합니다.

컴퓨터는 시킨 일을 정확하게 수행하지만, 스스로 판단해서 방향을 바꾸지는 않습니다. 반복문은 컴퓨터의 이런 특성을 활용해 같은 일을 빠짐없이 되풀이하게 하는 대표적인 방법입니다.

반복문은 정해진 규칙에 따라 일을 처리하되, 종료 조건을 만날 때까지 멈추지 않습니다. 그래서 가장 중요한 것은 언제 멈춰야 하는지를 알려 주는 종료 조건입니다. 종료 조건이 잘못 설정되면 컴퓨터는 끝나지 않는 작업에 빠지게 되는데, 이를 무한 루프라고 부릅니다.

for문의 특성과 언제 사용해야 하는지

for문은 프로그래밍 언어에서 널리 쓰이는 반복문 중 하나입니다. for문은 주로 반복 횟수가 정해져 있거나, 리스트나 배열처럼 순서가 있는 데이터를 차례대로 하나씩 꺼내 쓸 때 사용합니다.

예를 들어 일주일 동안의 요일을 차례대로 출력하거나, 장보기 목록에 있는 물건들을 하나씩 확인할 때 for문이 알맞습니다.

for문은 시작과 끝이 분명하게 정해지는 경우가 많아서, 코드가 몇 번 실행될지 예측하기 쉽다는 장점이 있습니다. 다음은 for문을 쓰기 좋은 대표적인 상황입니다.

  • 정해진 횟수만큼 특정 작업을 반복하고 싶을 때
  • 데이터 목록에 들어 있는 모든 항목을 하나씩 꺼내어 처리하고 싶을 때
  • 파일이나 데이터베이스의 레코드를 순서대로 읽어 와야 할 때
  • 구구단처럼 일정한 규칙을 가진 숫자를 차례대로 생성할 때

while문의 특성과 언제 사용해야 하는지

for문이 정해진 횟수만큼 도는 마라톤 선수라면, while문은 목표 지점에 도달할 때까지 계속 달리는 탐험가와 같습니다. while문은 반복 횟수를 미리 알 수 없고, 특정한 조건이 참인 동안에만 코드를 실행하고 싶을 때 사용합니다.

예를 들어 사용자가 올바른 비밀번호를 입력할 때까지 계속해서 입력을 요구하는 프로그램은 몇 번 만에 맞출지 미리 알 수 없습니다. 이럴 때 while문을 사용합니다.

조건이 만족되는 동안에는 계속해서 내부의 코드를 실행하고, 조건이 거짓이 되는 순간 반복문을 빠져나옵니다. 다음은 while문을 활용하기 좋은 상황입니다.

  • 사용자의 입력이나 외부의 신호에 따라 반복 여부가 결정될 때
  • 게임이 끝날 때까지 게임 루프를 계속 실행해야 할 때
  • 특정 파일의 다운로드가 끝날 때까지 상태를 계속 확인할 때
  • 정확한 횟수는 모르지만 어떤 상태에 도달할 때까지 작업이 필요할 때

파이썬 코드로 for문과 while문 만들어 보기

이제 앞에서 설명한 내용을 파이썬 코드로 확인해 보겠습니다. 먼저 for문입니다. range(5)는 0부터 4까지 다섯 개의 숫자를 만들어 주고, for문은 그 숫자를 하나씩 꺼내면서 아래 들여쓴 코드를 실행합니다. 그래서 print가 다섯 번 실행됩니다. 파이썬에서는 반복할 코드를 앞쪽에 공백 네 칸을 넣어서 구분합니다.

for i in range(5):
    print("안녕하세요")

이 코드를 실행하면 “안녕하세요”가 다섯 번 출력됩니다. 숫자 5를 10000으로 바꾸기만 하면 만 번 출력하는 코드가 되므로, 코드를 만 줄 작성할 필요가 없습니다.

안녕하세요
안녕하세요
안녕하세요
안녕하세요
안녕하세요

이번에는 1부터 100까지의 숫자를 모두 더해 보겠습니다. range(1, 101)은 1부터 100까지의 숫자를 만들어 줍니다. 끝 숫자인 101은 포함되지 않기 때문에, 100까지 반복하려면 101을 적어야 합니다. total 변수에 숫자를 하나씩 더해 나가고, 반복이 끝난 뒤 결과를 출력합니다.

total = 0
for number in range(1, 101):
    total = total + number
print(total)

이 코드를 실행하면 5050이 출력됩니다. 1부터 100까지의 합을 직접 계산하지 않고, 반복문이 100번 더하는 과정을 대신 처리해 준 것입니다.

5050

다음은 while문입니다. while 뒤의 조건이 참인 동안 아래 들여쓴 코드를 계속 실행합니다. count를 1로 시작해서 한 번 반복할 때마다 1씩 늘리고, count가 3보다 커지면 조건이 거짓이 되어 반복이 끝납니다. print 안의 f는 중괄호 { } 안의 값을 글자 속에 넣어 주는 기능입니다. 마지막 줄의 count = count + 1을 빠뜨리면 조건이 계속 참이어서 무한 루프에 빠집니다.

count = 1
while count <= 3:
    print(f"{count}번째 시도")
    count = count + 1

이 코드를 실행하면 아래와 같이 출력됩니다. 반복 횟수를 숫자로 정해 두는 for문과 달리, while문은 조건이 참인 동안 반복한다는 점이 다릅니다.

1번째 시도
2번째 시도
3번째 시도

앞에서 말한 비밀번호 예시도 while문으로 만들 수 있습니다. input()은 사용자가 키보드로 입력한 글자를 받아 오는 함수입니다. 아래 코드는 입력한 값이 1234가 될 때까지 계속 비밀번호를 물어보고, 맞게 입력하면 반복을 끝냅니다. 사용자가 몇 번 틀릴지는 코드를 쓰는 시점에 알 수 없기 때문에 이런 경우에 while문이 알맞습니다.

password = ""
while password != "1234":
    password = input("비밀번호를 입력하세요: ")
print("로그인 성공")

이 코드를 실행하면 1234를 입력할 때까지 같은 질문이 계속 나오고, 1234를 입력하면 “로그인 성공”이 출력됩니다. 몇 번 반복될지는 사용자가 입력하는 값에 달려 있습니다. 이 예제는 while문을 이해하기 위한 연습용이며, 실제 서비스에서는 비밀번호를 이렇게 코드에 적어 두지 않습니다.

반복문 안에서는 break와 continue도 자주 쓰입니다. break는 반복문을 바로 끝내고, continue는 이번 차례를 건너뛰고 다음 차례로 넘어갑니다. 아래 코드는 1부터 7까지 반복하면서 3은 건너뛰고, 6이 되면 반복을 끝냅니다.

for number in range(1, 8):
    if number == 3:
        continue
    if number == 6:
        break
    print(number)


실행하면 3은 건너뛰고 6에서 반복이 끝나기 때문에 아래와 같이 출력됩니다.

1
2
4
5

for문과 while문의 실제 활용 차이점 비교

많은 초보자가 for문과 while문 중 어떤 것을 써야 할지 헷갈려 합니다. 이론적으로는 for문으로 할 수 있는 일을 while문으로도 할 수 있고, 그 반대도 가능합니다. 하지만 상황에 맞는 반복문을 고르면 코드가 더 읽기 쉬워지고 실수도 줄어듭니다.

구분for문while문
주요 용도횟수가 정해진 반복, 데이터 순회조건에 따른 반복, 상태 기반 실행
코드 구조범위를 정하면 간결하게 쓸 수 있음초기값과 조건, 증가값을 직접 관리
실수 위험성상대적으로 낮음조건을 바꾸는 코드를 빠뜨리면 무한 루프에 빠질 수 있음
적합한 예시1부터 10까지 출력하기사용자가 그만둘 때까지 메뉴 보여 주기

일상 속 프로그래밍 사고방식의 적용

반복문을 이해하려면 문법을 외우는 것보다 일상의 업무를 프로그래밍의 시선으로 바라보는 연습이 도움이 됩니다. 예를 들어 매달 수십 개의 엑셀 파일을 열어 특정한 데이터를 복사해서 하나의 파일로 모으는 일을 한다고 가정해 보겠습니다. 사람이 직접 하면 시간이 오래 걸리고 실수가 생기기 쉽습니다.

반복문을 알고 있다면 이 과정을 이렇게 설계할 수 있습니다. 먼저 해당 폴더에 있는 모든 파일의 목록을 리스트로 만듭니다. 그리고 for문으로 첫 번째 파일부터 마지막 파일까지 순서대로 열어 봅니다.

필요한 데이터를 추출한 뒤 종합 파일에 붙여 넣고 파일을 닫습니다. 이 과정을 파일 수만큼 코드가 대신 반복해 주기 때문에, 사람이 파일마다 같은 작업을 되풀이하지 않아도 됩니다. 반복문은 이처럼 반복 작업을 줄이는 데 쓰입니다.

초보자가 자주 저지르는 실수와 대처 방법

반복문을 배울 때 자주 겪는 대표적인 문제들이 있습니다. 미리 알아 두면 시행착오를 줄이는 데 도움이 됩니다.

대표적인 실수는 무한 루프입니다. while문에서 조건을 거짓으로 만들어 주는 코드, 예를 들어 앞에서 본 count = count + 1을 빠뜨리면 조건이 계속 참이어서 반복이 끝나지 않습니다. 이때 프로그램이 멈춘 것처럼 보이거나 컴퓨터가 느려질 수 있습니다. 터미널에서 실행 중이라면 Control + C를 눌러 강제로 멈출 수 있습니다.

또 다른 실수는 오프바이원 에러입니다. 반복 횟수나 범위를 하나 잘못 세어서 원하는 횟수보다 한 번 더 돌거나 한 번 덜 도는 오류입니다.

파이썬의 range(5)는 0, 1, 2, 3, 4로 다섯 개의 숫자를 만들고, range(1, 6)은 1, 2, 3, 4, 5로 다섯 개의 숫자를 만듭니다. 이처럼 끝 숫자는 포함되지 않기 때문에 range(1, 5)처럼 쓰면 4번만 반복됩니다. 리스트의 길이보다 큰 번호를 읽으려다 오류가 나는 경우도 같은 종류의 실수입니다.

반복문을 익히는 학습 방법

반복문을 익히는 방법 중 하나는 작은 문제부터 직접 코드로 작성해 보는 것입니다. 강의를 보거나 책을 읽는 것도 도움이 되지만, 주변의 불편함을 해결하는 작은 코드를 직접 짜 보면 개념을 이해하는 데 큰 도움이 됩니다.

처음 연습하기 좋은 문제는 이런 것들입니다. 1부터 10까지의 숫자 중 짝수만 출력하기, 구구단 3단 출력하기, 과일 이름이 들어 있는 리스트를 하나씩 출력하기입니다. 직접 풀어 본 뒤 막히면 앞에서 본 for문과 while문 예제를 다시 살펴보세요.

컴퓨터와 친해지기 위해서는 매일 조금씩 실습하는 것이 중요합니다. 처음에는 머리로 이해가 되지 않아도 손으로 직접 타이핑하고 오류 메시지를 마주하다 보면 자연스럽게 감각이 생깁니다.

에러 메시지는 실패가 아니라 어디가 잘못되었는지 알려 주는 힌트라고 생각해 보세요. 반복문에 익숙해지면 반복되는 일을 코드로 줄일 수 있는 방법이 눈에 들어오기 시작합니다.

직접 실험해 보기: 반복문 한 번에 실행하기

for문으로 합계 구하기, while문으로 횟수 세기, break와 continue 사용하기를 한 번에 확인해 보려고, 맥에서 loops.py 파일을 만들어 python3로 직접 실행해 봤습니다. 사용한 코드는 아래와 같습니다.

total = 0
for number in range(1, 101):
    total = total + number
print(total)

count = 1
while count <= 3:
    print(f"{count}번째 시도")
    count = count + 1

for number in range(1, 8):
    if number == 3:
        continue
    if number == 6:
        break
    print(number)

실행 결과는 아래 화면과 같았습니다. 1부터 100까지 더한 합계 5050이 먼저 나왔고, while문은 1번째부터 3번째 시도까지 세 줄을 출력한 뒤 멈췄습니다. 마지막 for문에서는 continue 때문에 3이 건너뛰어졌고, break 때문에 6에서 반복이 끝나서 1, 2, 4, 5만 출력됐습니다.

맥 터미널에서 loops.py를 실행해 합계 5050, 1번째부터 3번째 시도, continue와 break를 거친 1 2 4 5가 출력된 화면

저도 이 코드를 직접 실행해서, continue와 break가 반복 중간에 어떻게 작동하는지 결과로 확인했습니다. 여러분도 숫자를 바꿔 가며 실행해 보면 반복문이 훨씬 빨리 이해됩니다.

반복문에 대해 자주 묻는 질문들

반복문을 처음 배울 때 자주 나오는 질문을 정리했습니다.

질문: for문과 while문 중에서 성능 차이가 많이 나나요?

답변: 일반적인 비즈니스 로직이나 일상적인 자동화 작업에서는 두 반복문의 성능 차이를 사람이 체감하기 어렵습니다. 속도보다는 작성하려는 코드의 목적과 가독성에 맞춰 적절한 것을 선택하는 것이 훨씬 중요합니다.

질문: 반복문 안에 또 다른 반복문을 넣어도 되나요?

답변: 네, 가능합니다. 이를 중첩 반복문이라고 부릅니다. 예를 들어 구구단을 만들거나 이차원 표 형태의 데이터를 처리할 때 매우 유용하게 쓰입니다. 다만 반복문이 너무 깊게 겹쳐지면 코드가 복잡해지고 실행 속도가 느려질 수 있으므로 주의해야 합니다.

질문: 무한 루프에 빠져서 프로그램이 멈췄을 때 어떻게 해야 하나요?

답변: 터미널에서 실행 중이라면 Control + C를 눌러 멈출 수 있습니다. 윈도우와 맥 모두 같은 방법이고, 맥에서도 커맨드 키가 아니라 Control 키를 사용합니다. 편집기에 실행을 멈추는 정지 버튼이 있다면 그 버튼을 눌러도 됩니다.

질문: 반복문을 사용할 때 꼭 알아야 할 필수 개념이 있나요?

답변: break와 continue를 함께 알아 두면 좋습니다. break는 반복문을 바로 끝내고, continue는 이번 차례만 건너뛰고 다음 차례로 넘어갑니다. 앞에서 본 예제처럼 특정 조건에서 반복을 멈추거나 건너뛸 때 사용합니다.

여백
함께 보면 좋은 글

댓글 0

첫 댓글을 남겨보세요.

광고 차단 알림

광고 클릭 제한을 초과하여 광고가 차단되었습니다.

단시간에 반복적인 광고 클릭은 시스템에 의해 감지되며, IP가 수집되어 사이트 관리자가 확인 가능합니다.