Python/기초

파이썬 반복문의 기초 정리(While문, for문, range 함수, continue, break, pass)

sdesign416 2026. 5. 27. 17:06

왜 반복문을 사용할까?

반복문은 같은 코드를 여러 번 반복해서 작성하지 않아도 되게 해준다.

즉, 컴퓨터가 반복적인 작업을 자동으로 처리하도록 만드는 방법이다.

 

결과적으로 반복문을 사용하면 코드가 짧아지고, 구조가 훨씬 깔끔해진다.

또한 수정이나 확장도 훨씬 쉬워진다.



1) 작업 효율이 좋아진다. (코드가 짧아짐)

예를 들어 어떤 작업을 100번 해야 한다고 하면,
반복문 없이 작성하면 코드가 100줄까지 늘어날 수 있다.

하지만 반복문을 사용하면 몇 줄로도 충분히 처리할 수 있다.
단순히 코드가 줄어드는 게 아니라 전체 구조가 훨씬 보기 좋아진다.


2) 실수를 줄일 수 있다. (휴먼 에러 방지)

코드를 복사해서 반복하면 생각보다 실수가 많이 생긴다.
중간에 하나 빠뜨리거나, 잘못 수정하는 경우도 흔하다.

반면 반복문은 정해진 규칙대로 자동으로 실행되기 때문에
사람이 직접 반복하면서 생기는 실수를 줄여준다.


3) 유지보수가 편해진다.

반복되는 코드가 많을수록 수정할 때 일이 많아진다.
여러 군데를 하나씩 찾아서 고쳐야 하기 때문이다.

하지만 반복문을 사용하면
딱 한 부분만 수정하면 전체에 반영된다.


4) 대용량 데이터 처리에 필수다.

데이터가 몇 개 정도라면 몰라도,
수천~수만 개가 넘어가면 반복문 없이는 처리 자체가 어렵다.

데이터 분석이나 자동 처리에서는 거의 필수라고 보면 된다.


1. while 문

while문은 조건이 참(True)인 동안 계속 반복하는 구조이다.

 

조건을 먼저 확인하고, 

참이면 실행하고 다시 조건을 확인하는 방식으로 돌아간다.

조건이 False가 되면 그때 반복이 끝난다.

 

단, 조건이 계속 True로 유지될 경우 끝나지 않는 반복(무한 루프)이 된다.

while 조건:
    # 조건이 참인 동안 실행될 코드

1_1) while문의 기본 흐름

위 코드는 아래의 실행순서를 반복하는 구조이다.

  • i가 5 이하인 동안 반복
  • 한 번의 반복이 끝날 때 마다 i값 1 증가

1_2) 무한 루프

while문의 조건이 항상 True라면 반복문은 절대 끝나지 않는다.

이를 무한루프(Infinite Loop)라고 한다.

while True:
    print('Hello Python')

 

💡무한루프 왜 사용할까?

이러한 무한루프도 사용하는 경우가 있긴 하다.

 

주로 프로그램이 종료되지 않고 전원이 꺼질 때까지 영원히 지속되어야 하거나,

상시 대기 상태를 유지해야할 때 사용된다.

  • 게임 루프
  • 서버 실행
  • 사용자 입력 대기

1_3) while로 합 구하기

while문은 단순 반복뿐 아니라 누적 계산에도 많이 쓰인다.

 

예를 들어 아래 이미지처럼 1부터 10까지 더하는 경우,
하나씩 더하면서 값을 계속 누적하는 방식으로 처리한다.

 

💡실행 과정

  • i : 현재 더할 숫자, sum : 누적 합계를 저장할 변수 지정
  • while문은 i <= 10 조건이 True인 동안 반복
  • 반복할 때 마다 현재 i값을 sum에 누적
  • 이후 i += 1 을 통해 i값을 1 증가
  • i가 11이 되는 순간 조건이 False가 되어 반복문 종료

즉, 1부터 10까지의 숫자를 차례대로 더해

최종적으로 55가 출력된다.


2. for 문

for문은 정해진 범위 안에서 반복할 때 사용하는 구조다.

 

while문이 조건 기반이라면,
for문은 정해진 데이터나 범위를 기준으로 돈다고 보면 된다.

보통 리스트, 문자열, 범위 데이터와 함께 많이 사용된다.

# 요소: 반복할 시퀀스의 각 항목이 for 문의 실행 도중에 할당되는 변수
for 요소 in 시퀀스:
    # 실행할 코드

 

2_1) 문자열 반복

문자열은 사실 문자들의 모음이기 때문에
하나씩 순서대로 접근할 수 있다.

그래서 for문으로 한 글자씩 처리하는 게 가능하다.


2_2) 리스트와 for문

리스트는 for문과 가장 자주 함께 쓰인다.
리스트 안에 있는 값들을 순서대로 하나씩 꺼내서 처리하는 구조라
데이터 처리할 때 기본처럼 사용된다.


2_3) 딕셔너리와 반복문

딕셔너리는 조금 더 다양한 방식으로 반복할 수 있다.

  • 키만 반복
  • 값만 반복
  • 키와 값 같이 반복

기본적으로 반복하면 키가 먼저 나오고,
필요에 따라 값이나 둘 다 꺼낼 수 있다.

 

키(key) 반복

딕셔너리를 그대로 반복하면 기본적으로 키가 반환된다.

dic1 = {'no':1, 'userid':'apple', 'name':'김사과', 'hp':'010-1111-1111'}

# 방법 1
for i in dic1:
    print(i, end=' ')

# 방법 2
for i in dic1.keys():
    print(i, end=' ')
    
# 출력결과 : no userid name hp

 

값(value) 반복

values()를 사용하여 딕셔너리의 value 값만 반복할 수 있다.

dic1 = {'no':1, 'userid':'apple', 'name':'김사과', 'hp':'010-1111-1111'}

# 방법 1
for i in dic1.values():
    print(i, end=' ')

# 방법 2
for i in dic1:
    print(dic1[i], end=' ')	  # key(인덱싱)사용해 value 꺼냄

# 방법 3
for i in dic1:
    print(dic1.get(i), end=' ')  # key를 이용해 get()으로 value 꺼냄
    
# 출력결과 : 1 apple 김사과 010-1111-1111

 

키와 값 함께 반복

items()를 사용하여 key와 value를 함께 출력할 수 있다.

dic1 = {'no':1, 'userid':'apple', 'name':'김사과', 'hp':'010-1111-1111'}

# 방법 1
for i in dic1.items(): 		   # (key, value) 형태의 튜플 반환
    print(i)

# 방법 2
for key, value in dic1.items():    # 튜플 언패킹으로 key와 value를 각각 저장
    print(key, value)
    
# 방법 1 출력결과 : 
# ('no', 1)
# ('userid', 'apple')
# ('name', '김사과')
# ('hp', '010-1111-1111'
    
# no 1
# userid apple
# name 김사과
# hp 010-1111-1111

2_4) 조건과 함께 사용

for문 안에서는 조건문을 같이 써서
특정 값만 골라서 처리하는 것도 가능하다.

즉, 전체를 돌면서 필요한 것만 걸러내는 방식이다.


3. range() 함수

range() 함수는 일정 범위의 숫자를 생성할 때 사용하는 함수로

보통 for문과 함께 사용된다.

range(start, stop, step)
  • start (선택사항) → 시작값(기본값 0)
  • stop → 종료값(stop값 직전까지의 정수 포함)
  • step (선택사항) → 증가값(기본값 1)

3_1) 기본 사용

for i in range(1, 10, 2):
    print(i, end=' ')

# 출력결과 : 1 3 5 7 9

1부터 시작해 2씩 늘려가며 10까지 반복한다.


3_2) 음수 사용하기

range()는 감소하는 반복에도 사용할 수 있다.

이 경우엔 step 값에 음수를 넣어 감소 방향으로 반복한다.

for i in range(5, 0, -1):
    print(i, end=' ')
    
# 출력결과 : 5 4 3 2 1

step 값에 -1이 들어갔기 때문에

시작값인 5에서부터 종료값 0직전인 1까지

숫자가 1씩 감소하면서 반복한다.


💡range() 함수 왜 사용할까?

for문에서 숫자를 반복할 때 보통 range() 함수를 사용한다.

# range() 함수 사용
for i in range(5):
    print(i)
    
# List 사용
for i in [0, 1, 2, 3, 4]:
    print(i)
    
# 출력결과 같음 : 
# 0
# 1
# 2
# 3
# 4

출력 결과는 리스트를 사용하는 것과 비슷하지만 내부 동작 방식에는 큰 차이가 있다.

 

리스트는 숫자들을 미리 메모리에 저장한 뒤 하나씩 꺼내어 사용한다.

반면에 range() 함수는 반복이 진행될 때 필요한 숫자를 하나씩 생성한다.

 

즉, 아래의 장점을 가졌기 때문에 for문에서는 range() 함수를 사용한다.

  • 메모리 사용량이 더 적다
  • 큰 반복에서 더 효율적
  • 반복 종료 후 불필요한 데이터가 남지 않는다.

4. 중첩 반복문

중첩 반복문은 반복문 안에 또 반복문이 들어가는 구조다.

 

외부 반복문의 각 반복마다 내부 반복문이 모두 실행되는 방식으로

다차원의 데이터를 처리하거나 복잡한 작업을 수행할 때 유용하게 사용된다.

for 외부_변수 in 외부_시퀀스:
    for 내부_변수 in 내부_시퀀스:
        # 내부 반복문 코드
    # 외부 반복문 코드

 

처음엔 중첩 반복문의 실행 흐름이 헷갈릴 수 있지만,

외부 반복이 '행', 내부 반복이 '열' 이라고 생각하면 이해하기 쉽다.


5. 증첩 반복문을 활용해 구구단 출력하기

중첩 반복문의 대표적인 예가 구구단이다.

외부 반복문이 단(2~9)을 담당하고,
내부 반복문이 1~9까지 곱하는 역할을 한다.

그래서 외부가 한 번 돌 때마다 내부는 전체가 다시 실행된다.


5_1) for문 사용

for문은 반복 범위를 미리 지정하기 때문에

range() 함수에 반복 할 구구단의 횟수를 입력하여 사용한다.

# 외부 반복문 : 2~9단까지 반복
for i in range(2, 10):
    print(f"{i}단")

    # 내부 반복문 : 각 단에서 1~9까지 반복
    for j in range(1, 10):
        print(f"{i} x {j} = {i*j}")

    # 단이 끝나면 줄바꿈
    print()
    
# 출력결과 : 
# 2단
# 2 x 1 = 2
# 2 x 2 = 4
...

# 3단
# 3 x 1 = 3
...

# 9 x 9 = 81

5_2) while문 사용

while문은 직접 조건을 관리해야 하기 때문에,
반복 변수의 증가와 초기화 위치가 매우 중요하다.

 

특히 중첩 while문에서는
내부 반복 변수(j)를 다시 초기화하지 않으면
다음 반복에서 조건이 이미 False가 되어 실행되지 않는다.

i = 2
j = 1

# 외부 반복문 : 2~9단까지 반복
while i <= 9:
    print(f"{i}단")

    # 내부 반복문 : 각 단마다 1~9까지 반복
    while j <= 9:
        print(f"{i} x {j} = {i*j}")

        # 곱해질 숫자를 1증가
        j += 1 

    # 내부 반복문이 종료되면 i값 1 증가
    i += 1

    # j가 10이 된 상태이므로 다시 1로 
    # j를 초기화 하지 않을 경우:
    # 2단 이후부터 내부 반복문은 실행되지 않음.
    j = 1 
  
    # 단 구분용 줄바꿈
    print()
    
# 출력결과 : 
# 2단
# 2 x 1 = 2
# 2 x 2 = 4
# ...

# 3단
# 3 x 1 = 3
...

# 9 x 9 = 81

 


6. 반복문 흐름 제어

반복문에서는 단순히 코드를 반복 실행하는 것뿐만 아니라,

 

상황에 따라 반복을 건너뛰거나,
반복 자체를 종료하는 등의 흐름 제어도 가능하다.


6_1) continue문

continue문은 현재 반복만 건너뛰고,
다음 반복으로 이동하는 제어문이다.

 

즉,
continue 아래에 작성된 코드는 실행하지 않고
반복문의 처음으로 다시 돌아간다.

위 코드에서는 i가 3일 때 continue가 실행되므로
3은 출력되지 않는다.

 

💡 continue는 언제 사용할까?

  • 특정 데이터를 제외하고 싶을 때
  • 조건에 맞지 않는 값을 건너뛸 때
  • 오류 데이터를 무시하고 계속 반복할 때

6_2) break문

break문은 반복문을 즉시 종료하는 제어문이다.

 

조건과 상관없이
break가 실행되는 순간 반복문은 완전히 종료된다.

위 코드에선 i가 3이 되는 순간 break가 실행되므로
반복문이 즉시 종료된다.

 

💡 break는 언제 사용할까?

  • 원하는 데이터를 찾았을 때
  • 반복을 더 이상 진행할 필요가 없을 때
  • 무한루프 종료 조건을 만들 때

6_3) pass문

pass문은 아무 동작도 하지 않는 제어문이다.

코드는 작성해야 하지만
아직 실행할 내용을 만들지 않았을 때 사용한다.

 

💡 pass는 언제 사용할까?

  • 코드 구조만 먼저 만들 때
  • 나중에 기능을 추가할 예정일 때
  • 문법 오류를 방지하며 임시로 비워둘 때

예를 들어 함수나 조건문 내부를 비워두면 오류가 발생하지만,
pass를 작성하면 오류 없이 실행할 수 있다.

if True:
    pass

 


반복문 흐름 제어 한눈에 보기

제어문 기능 특징
continue 현재 반복 건너뛰기 아래 코드를 실행하지 않고 다음 반복으로 이동
break 반복문 즉시 종료 조건과 상관없이 반복문 자체를 종료
pass 아무 동작도 하지 않음 문법 구조만 유지하고 실행하지않음

 


정리

  • while문은 조건이 참(True)인 동안 반복 실행된다.
  • for문은 반복 횟수를 알 수 있을 때 사용한다.
  • range() 함수는 일정 범위의 숫자를 생성할 때 사용된다.
  • 중첩 반복문의 외부 반복문은 행(Row), 내부 반복문은 열(Column) 개념으로 이해하면 쉽다.