안녕하세요! 지난 시간에는 반복문의 흐름을 중간에 제어하는 break와 continue 키워드에 대해 알아보았습니다. 이제 프로그램이 특정 조건에 따라 유연하게 반복을 멈추거나 건너뛸 수 있게 되었죠!
이번 시간에는 조건문(if, elif, else)과 반복문(for, while)을 **중첩(Nested)**하여 사용하는 방법에 대해 알아보겠습니다. 중첩이란 말 그대로 "안에 또 다른 것을 넣는" 것을 의미합니다. 조건문 안에 조건문, 반복문 안에 반복문, 또는 반복문 안에 조건문 등 다양한 조합이 가능하며, 이를 통해 훨씬 더 복잡하고 강력한 로직을 구현할 수 있습니다.
중첩된 구조는 코드의 들여쓰기 레벨이 깊어지므로, 이전에 배운 들여쓰기 규칙을 더욱 철저히 지키는 것이 중요합니다!
Part 1: 중첩 조건문 - if 안에 if
하나의 if 문 조건이 참일 때, 그 안에서 또 다른 if 문을 사용하여 세부적인 조건을 판단할 수 있습니다.
1. 기본 형식
if 조건1:
# 조건1이 True일 때 실행될 코드
if 조건2:
# 조건1이 True이고, 조건2도 True일 때 실행될 코드
# (더 깊이 들여쓰기 됨)
else:
# 조건1이 True이고, 조건2는 False일 때 실행될 코드
else:
# 조건1이 False일 때 실행될 코드
예시: 날씨와 미세먼지 상태에 따른 외출 결정
# 파일 이름: nested_if_example.py
weather = "맑음"
fine_dust = "나쁨" # 좋음, 보통, 나쁨
if weather == "맑음":
print("날씨가 맑습니다.")
if fine_dust == "좋음":
print("미세먼지도 좋으니, 야외 활동하기 좋습니다!")
elif fine_dust == "보통":
print("미세먼지가 보통이니, 가벼운 야외 활동은 괜찮습니다.")
else: # fine_dust == "나쁨"
print("미세먼지가 나쁘니, 실내 활동을 권장합니다.")
else:
print("날씨가 맑지 않습니다. 야외 활동은 보류해주세요.")
print("\n--- 다른 경우 테스트 ---")
weather2 = "비"
fine_dust2 = "좋음"
if weather2 == "맑음":
if fine_dust2 == "좋음":
print(f"날씨: {weather2}, 미세먼지: {fine_dust2} -> 야외 활동 좋음")
else:
print(f"날씨: {weather2}, 미세먼지: {fine_dust2} -> 실내 활동 권장")
else:
print(f"날씨: {weather2}, 미세먼지: {fine_dust2} -> 야외 활동 보류")
# 파일 이름: nested_if_example.py
weather = "맑음"
fine_dust = "나쁨" # 좋음, 보통, 나쁨
if weather == "맑음":
print("날씨가 맑습니다.")
if fine_dust == "좋음":
print("미세먼지도 좋으니, 야외 활동하기 좋습니다!")
elif fine_dust == "보통":
print("미세먼지가 보통이니, 가벼운 야외 활동은 괜찮습니다.")
else: # fine_dust == "나쁨"
print("미세먼지가 나쁘니, 실내 활동을 권장합니다.")
else:
print("날씨가 맑지 않습니다. 야외 활동은 보류해주세요.")
print("\n--- 다른 경우 테스트 ---")
weather2 = "비"
fine_dust2 = "좋음"
if weather2 == "맑음":
if fine_dust2 == "좋음":
print(f"날씨: {weather2}, 미세먼지: {fine_dust2} -> 야외 활동 좋음")
else:
print(f"날씨: {weather2}, 미세먼지: {fine_dust2} -> 실내 활동 권장")
else:
print(f"날씨: {weather2}, 미세먼지: {fine_dust2} -> 야외 활동 보류")
[VS Code 터미널 출력]

Part 2: 중첩 반복문 - for 안에 for 또는 while 안에 while
반복문 안에 또 다른 반복문이 있는 형태를 중첩 반복문이라고 합니다. 바깥쪽 반복문이 한 번 실행될 때마다 안쪽 반복문은 완전히 실행됩니다.
1. for 문 중첩: 구구단 전체 출력하기
구구단 전체를 출력하는 것은 중첩 for 문의 대표적인 예시입니다.
# 파일 이름: nested_for_gugudan.py
print("--- 구구단 전체 출력 ---")
# 첫 번째 for 문: 단(2단부터 9단까지)을 반복
for dan in range(2, 10): # 2, 3, ..., 9
print(f"\n--- {dan}단 ---") # 각 단이 시작될 때 단 표시
# 두 번째 for 문: 각 단의 곱해지는 숫자(1부터 9까지)를 반복
for num in range(1, 10): # 1, 2, ..., 9
result = dan * num
print(f"{dan} x {num} = {result}")
print("\n--- 구구단 출력 완료 ---")
- 바깥쪽 for 문(for dan in range(2, 10))이 dan = 2일 때, 안쪽 for 문(for num in range(1, 10))은 num = 1부터 num = 9까지 모두 실행됩니다.
- 안쪽 for 문이 끝나면, 바깥쪽 for 문이 다음 dan = 3으로 넘어가고, 안쪽 for 문이 다시 1부터 9까지 모두 실행됩니다. 이 과정이 9단까지 반복됩니다.
# 파일 이름: nested_for_gugudan.py
print("--- 구구단 전체 출력 ---")
# 첫 번째 for 문: 단(2단부터 9단까지)을 반복
for dan in range(2, 10):
print(f"\n--- {dan}단 ---")
# 두 번째 for 문: 각 단의 곱해지는 숫자(1부터 9까지)를 반복
for num in range(1, 10):
result = dan * num
print(f"{dan} x {num} = {result}")
print("\n--- 구구단 출력 완료 ---")
[VS Code 터미널 출력]

2. while 문 중첩: 별 피라미드 만들기
중첩 while 문을 사용하여 간단한 패턴을 만들어볼 수도 있습니다.
# 파일 이름: nested_while_stars.py
rows = 5 # 만들 피라미드의 층 수
current_row = 1
while current_row <= rows: # 바깥쪽 while: 층 수를 반복
stars_in_row = 1
while stars_in_row <= current_row: # 안쪽 while: 현재 층의 별 개수를 반복
print("*", end="") # 별을 출력하고 줄바꿈하지 않음
stars_in_row += 1
print() # 한 층의 별 출력이 끝나면 줄바꿈
current_row += 1
print("\n별 피라미드 완성!")
# 파일 이름: nested_while_stars.py
rows = 5 # 만들 피라미드의 층 수
current_row = 1
while current_row <= rows: # 바깥쪽 while: 층 수를 반복
stars_in_row = 1
while stars_in_row <= current_row: # 안쪽 while: 현재 층의 별 개수를 반복
print("*", end="")
stars_in_row += 1
print() # 한 층의 별 출력이 끝나면 줄바꿈
current_row += 1
print("\n별 피라미드 완성!")
[VS Code 터미널 출력]

Part 3: 반복문 안에 조건문 활용
가장 흔하게 사용되는 패턴 중 하나입니다. 반복문을 통해 여러 요소를 순회하면서, 각 요소가 특정 조건을 만족하는지에 따라 다른 작업을 수행할 때 사용됩니다.
예시: 학생들의 점수를 확인하고 합격/불합격 판별하기
# 파일 이름: loop_with_if.py
student_scores = [85, 62, 90, 77, 45, 88]
passing_score = 60
print("--- 학생들의 시험 결과 ---")
for score in student_scores:
if score >= passing_score:
print(f"점수: {score}점 - 합격!")
else:
print(f"점수: {score}점 - 불합격!")
print("\n결과 확인 완료.")
# 파일 이름: loop_with_if.py
student_scores = [85, 62, 90, 77, 45, 88]
passing_score = 60
print("--- 학생들의 시험 결과 ---")
for score in student_scores:
if score >= passing_score:
print(f"점수: {score}점 - 합격!")
else:
print(f"점수: {score}점 - 불합격!")
print("\n결과 확인 완료.")
[VS Code 터미널 출력]

Part 4: 중첩 구조 사용 시 주의사항
- 들여쓰기: 중첩이 깊어질수록 들여쓰기가 매우 중요해집니다. 각 코드 블록이 올바른 들여쓰기 레벨을 가지고 있는지 반드시 확인해야 합니다. 잘못된 들여쓰기는 IndentationError를 발생시킵니다.
- 가독성: 너무 많은 중첩은 코드의 가독성을 해칠 수 있습니다. 일반적으로 3단계 이상의 중첩은 피하고, 함수로 분리하는 등의 방법을 고려하는 것이 좋습니다.
- 성능: 중첩 반복문은 반복 횟수가 곱해지므로, 처리해야 할 데이터의 양이 많을 때는 성능에 영향을 줄 수 있습니다. 효율적인 알고리즘을 고려하는 것이 중요합니다.
마무리하며
이번 시간에는 조건문과 반복문을 중첩하여 사용하는 방법에 대해 알아보았습니다. 중첩 조건문은 더 세밀한 판단을, 중첩 반복문은 다차원적인 반복 작업을 가능하게 합니다. 또한, 반복문 안에 조건문을 넣어 각 반복마다 다른 처리를 하는 것은 프로그래밍에서 매우 흔하고 중요한 기법입니다.
이제 여러분은 파이썬 프로그램의 흐름을 더욱 복잡하고 다양하게 제어할 수 있는 강력한 도구들을 익히게 되었습니다.
다음 챕터부터는 파이썬에서 데이터를 효율적으로 관리하고 조직하는 데 사용되는 자료구조의 기본에 대해 자세히 알아보겠습니다. 첫 번째로 **리스트(List)**의 정의와 사용법을 배우게 될 것입니다.
궁금한 점이 있다면 언제든지 질문해주세요! 다음 포스팅에서 만나요!
'Python' 카테고리의 다른 글
3-2. 튜플(Tuple)과 불변성 (0) | 2025.06.23 |
---|---|
3-1. 리스트(List)의 정의와 사용 (1) | 2025.06.23 |
2-5. break, continue의 사용법 (0) | 2025.06.22 |
2-4. for 반복문과 range() (0) | 2025.06.22 |
2-3. while 반복문 (0) | 2025.06.21 |