사후 검사 루프
사후 검사 루프 (Post-test Loop)
개요
사후 검사 루프(Post-test Loop)는 프로그래밍에서 반복문(Loop)의 한 종류로, 루프의 본문(body)이 실행된 후에 조건식(condition)을 평가하여 루프를 계속할지 종료할지를 결정하는 제어 흐름 구조를 의미합니다.
일반적으로 가장 널리 알려진 for 루프나 while 루프는 조건을 먼저 검사하는 사전 검사 루프(Pre-test Loop)에 해당합니다. 반면, 사후 검사 루프는 최소한 한 번은 루프 본문을 실행해야 하는 상황에 유용하게 사용됩니다. 대표적인 예로 사용자 입력을 받을 때, 최소 한 번은 프롬프트를 띄워야 하는 경우나, 데이터베이스에서 결과를 가져와야 하는 경우 등이 있습니다.
주요 특징
사후 검사 루프는 다음과 같은 핵심적인 특징을 가지고 있습니다.
- 최소 한 번의 실행 보장: 조건식이 루프의 끝에서 평가되므로, 조건이 거짓(false)이더라도 루프 본문은 반드시 한 번 이상 실행됩니다.
- 조건 평가 시점: 루프의 마지막 단계에서 조건이 확인되므로, 루프가 종료되는 시점이 사전 검사 루프와 다릅니다.
- 가독성: "무엇인가를 수행하고, 그 결과가 만족스러운지 확인한다"는 논리적 흐름을 자연스럽게 표현할 수 있습니다.
주요 구현 예시
대부분의 현대 프로그래밍 언어는 사후 검사 루프를 위해 do-while 또는 [repeat-until](/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/%EA%B5%AC%EB%AC%B8/repeat-until) 구조를 제공합니다.
1. C/C++, Java, JavaScript (do-while 루프)
C 계열 언어와 Java, JavaScript에서는 do-while 구문을 사용합니다.
do {
// 루프 본문: 최소 한 번은 실행됨
console.log("루프가 실행되었습니다.");
// 조건 검사
} while (조건식);
동작 원리:
1. 루프 본문 실행
2. while 괄호 안의 조건식 평가
3. 조건이 참(true)이면 1번으로 돌아가 반복, 거짓(false)이면 루프 종료
2. Pascal, Lua (repeat-until 루프)
Pascal 계열 언어나 Lua에서는 repeat-until 구문을 사용합니다. 이는 조건이 참이 될 때까지 반복한다는 점에서 do-while과 논리가 반대입니다.
repeat
-- 루프 본문
print("루프가 실행되었습니다.")
until 조건식 -- 조건이 참이 되면 루프 종료
동작 원리:
1. 루프 본문 실행
2. until 뒤의 조건식 평가
3. 조건이 거짓(false)이면 1번으로 돌아가 반복, 참(true)이면 루프 종료
사전 검사 루프와의 비교
| 특징 | 사후 검사 루프 (Post-test) | 사전 검사 루프 (Pre-test) |
|---|---|---|
| 조건 평가 시점 | 루프 본문 실행 후 | 루프 본문 실행 전 |
| 최소 실행 횟수 | 최소 1회 | 0회 (조건이 처음부터 거짓일 수 있음) |
| 주요 구문 | do-while, repeat-until |
while, for |
| 사용 시나리오 | 입력 검증, 메뉴 선택, 초기화 필요 시 | 횟수 기반 반복, 조건부 반복 |
사용 시나리오 및 예제
사후 검사 루프는 주로 사용자의 입력을 검증하거나 최소한의 데이터 처리가 필수적인 경우에 사용됩니다.
예제: 유효한 입력 받을 때까지 반복하기
사용자가 양수(0보다 큰 수)를 입력할 때까지 계속 묻는 프로그램입니다.
let number;
do {
// 1. 사용자에게 입력 받기 (최소 한 번은 실행됨)
number = prompt("0보다 큰 정수를 입력하세요:");
// 2. 입력이 유효하지 않을 경우 경고
if (number <= 0) {
alert("잘못된 입력입니다. 다시 시도해주세요.");
}
} while (number <= 0); // 3. 조건이 참(음수 또는 0)이면 다시 반복
alert("유효한 입력: " + number);
이 경우, while 루프를 사용했다면 조건을 먼저 확인해야 하므로 별도의 초기화 과정이 필요하거나 코드가 복잡해질 수 있습니다. do-while을 사용하면 "입력받기 -> 검증 -> 재요청"의 흐름을 자연스럽게 구현할 수 있습니다.
주의사항
- 무한 루프 위험: 조건식이 항상 참이 되거나, 루프 본문 내에서 조건을 변경하는 변수가 업데이트되지 않으면 무한 루프에 빠질 수 있습니다.
- 성능 고려: 조건 검사 비용이 높은 경우, 사전 검사 루프를 사용하여 불필요한 실행을 방지하는 것이 더 효율적일 수 있습니다.
- 가독성: 모든 개발자가
do-while의 동작 방식을 정확히 이해하고 있지 않을 수 있으므로, 복잡한 로직에서는 명확한 주석을 추가하는 것이 좋습니다.
관련 문서
- 반복문 (Iteration)
- 제어 흐름 (Control Flow)
- [사전 검사 루프 (Pre-test Loop)]
- do-while 문
참고 자료
- C++ How to Program, Deitel & Deitel
- Java Programming, Liang
- MDN Web Docs: do...while statement
이 문서는 AI 모델(qwen/qwen3.6-35b-a3b)에 의해 생성된 콘텐츠입니다.
주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.