Infra & Security Eng/Programming

반목분(while문과 for 문) 개념, 차이점, 예제

엔지니어 E 2026. 2. 6. 16:46
반응형

반복문(while문과 for문)

프로그래밍에서 반복문(Loop)은 동일한 작업을 반복 수행하여 코드의 효율성을 높이는 필수 도구
제어 방식에 따라 크게 **선언적 반복(for)**과 **조건적 반복(while)**으로 나뉜다

증감식: 반복문은 조건이 **참(True)**이면 계속 실행되고, **거짓(False)**이 되면 중단된다.

그래서 반복을 제때 멈추려면 루프 안에서 조건에 사용되는 숫자를 더하거나 빼서 상태를 바꿔주어야 하는데, 이 과정을 증감식이라고 합니다. 결국 증감식은 반복문이 무한히 돌지 않게 해주는 탈출 장치인 셈이다. 

 

한눈에 보는 핵심 차이

구분 for 문 while 문
성격 횟수가 정해진 반복 조건이 만족되는 동안 반복
주요 용도 리스트, 범위 등 끝이 정해진 데이터를 돌 때 특정 상태가 변할 때까지 계속할 때
위험성 상대적으로 안전함 조건을 잘못 설정하면 무한 루프에 빠지기 쉬움

 

While 문 간단한 이해 

<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    <title>ex01</title>
</head>
<body>
<?php
$a = 1; ---> 변수 a를 만들고 1을 집어넣음(시작값)

while ($a <= 10) { ---> a가 10보다 작거나 같을때까지 괄호 {} 안의 내용을 계속 반복함
    if ($a % 2 == 0) { ---> a를 2로 나눈 나머지가 0인지 확인 (짝수인지 검사하는 필터)
        echo(" {$a}<br> "); ---> 짝수가 맞다면 그 숫자를 화면에 찍고 줄을 바꿈
    }
    $a++; ---> $a를 1씩 증가시키세요 라는 뜻
}
?>
</body>
</html>
<hr>
<?php show_source(__FILE__); ?>
ex1.1 0보다 큰 정수를 입력받아 입력받은 정수까지 홀수의 합과 짝수의 합을 각각 출력하는 프로그램을 작성한다.(ex1-1.html, ex1-1.php)

<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    <title>ex1-1.php</title>
</head>
<body>
    <h3>ex1-1 결과</h3>
<?php
  $num = $_POST["num"]; ---> 사용자가 화면에서 입력하고 보낸 숫자를 꺼내 변수에 저장 

  if($num <= 0 || $num == "") { ---> 만약 받은 숫자가 0보다 작거나 비어있으면 아래를 실행함
      echo("<script>
              alert('0보다 큰 정수를 입력하세요'); ---> 화면 경고 창 띄우기
              history.go(-1); --> 이전 화면 (HTML 입력창) 으로 강제 이동 
            </script>");
      exit; ---> 에러가 발생했으므로 여기서 프로그램 종료
  }

  $i = 1; ---> * i: 카운터 라고 부르는 변수, 즉 1,2,3,4,5... 변하는 수  
  $odd_sum = 0;  // 홀수 합 바구니 ---> 홀수를 더해서 담아놓을 바구니 (처음엔 0)
*  처음에 1로 지정하면 값을 더할때 틀린 값을 출력하므로 주의
  $even_sum = 0; // 짝수 합 바구니 ---> 짝수를 더해서 담아놓을 바구니 (처음엔 0)

 1부터 입력한 숫자($num)까지 반복하며 계산
  while ($i <= $num) { ---> i가 사용자가 입력한 숫자($num) 가 될때까지 무한 반복
      if ($i % 2 == 0) { ---> i를 2로 나눈 나머지가 0 이면 ( ---> 즉, 짝수이면)
          $even_sum = $even_sum + $i; ---> 현재 짝수 합계 바구니에 i를 추가
      } else { ---> i를 2로 나눈 나머지가 0이 아니면 ---> 즉, 홀수이면
          $odd_sum = $odd_sum + $i; ---> 현재 홀수 합계 바구니에 i를 추가
      }
      $i++; ---. ---> $i의 값을 1만큼 증가시킨다(다음 숫자로 바꾼다)
* 만약 적지 않는다면 $i는 1에만 계속 머물러 있으므로 다음 숫자 프로세스 진행을 못하게 된다 
  }

  echo("입력하신 숫자: {$num}<br><br>"); ---> 화면에 입력했던 숫자 출력
  echo("1부터 {$num}까지 홀수의 합: {$odd_sum}<br>"); ---> 계산된 홀수 총합 출력 
  echo("1부터 {$num}까지 짝수의 합: {$even_sum}<br>"); ---> 계산된 짝수 총합 출력
?>
<hr>
<?php show_source(__FILE__); ?>
</body>
</html>
[사용자 입력값 $num = 2 일 때의 실행 순서]

1단계: $i$가 1일 때
비교: $i(1) <= $num(2) 인가? → 참 (1은 2보다 작으므로 반복문 안으로 들어감)
검사: 1 % 2 == 0 인가? → 거짓 (1은 2로 나누어 떨어지지 않음)
계산: $odd_sum 바구니에 현재 $i인 1을 넣음 → $odd_sum = 1
증가: $i++ 실행 → $i가 2로 바뀜

2단계: $i$가 2일 때
비교: $i(2) <= $num(2) 인가? → 참 (2는 2와 같으므로 한 번 더 들어감)
검사: 2 % 2 == 0 인가? → 참 (2는 2로 나누어 떨어짐)
계산: $even_sum 바구니에 현재 $i인 2를 넣음 → $even_sum = 2
증가: $i++ 실행 → $i가 3으로 바뀜

3단계: $i$가 3일 때
비교: $i(3) <= $num(2) 인가? → 거짓 (3은 2보다 크기 때문에 조건 탈락)
탈출: while 반복문을 완전히 빠져나옴

[최종 결과]
$odd_sum (홀수 합): 1
$even_sum (짝수 합): 2

 

0 보다 큰 값을 입력 받아 1 에서 입력 값까지의 합을 출력한다.
<?php
  $num = $_POST["num"]; // 사용자가 입력한 'num'이라는 이름의 데이터를 받아 변수 $num에 대입함

  if($num == "" || $num < 1) { 
  // if: 조건이 참인지 검사함
  // $num == "": 입력값이 빈 칸인지 확인함
  // ||: 또는(OR)의 의미로, 좌우 조건 중 하나만 맞아도 참으로 처리함
  // $num < 1: 입력값이 1보다 작은지 확인함

      echo("
          <script>
            window.alert('1보다 큰 값을 입력하세요'); // 브라우저 경고창에 해당 메시지를 띄움
            history.go(-1); // 브라우저를 이전 페이지(입력 폼)로 강제 이동시킴
          </script>
      ");
      
      exit; // 에러가 발생했으므로 스크립트 실행을 여기서 즉시 중단함
  }

  $sum = 0; // 합계를 누적 계산하기 위해 변수 $sum을 선언하고 0으로 초기화함
* sum 합계가 처음부터 1이면 계산이 꼬이므로 0으로  초기화 해야 한다 

반복문 시작(for문 진입)
  for($a = 1; $a <= $num; $a++){
  // for: 지정한 조건 동안 반복 실행함
  // $a = 1: 카운트 변수 $a를 1부터 시작하도록 초기값을 설정함
  // $a <= $num: $a가 사용자가 입력한 $num보다 작거나 같을 때까지만 반복함
  // $a++: 한 바퀴 돌 때마다 $a의 값을 1씩 증가시킴

        $sum = $sum + $a; // 기존 합계($sum)에 현재의 숫자($a)를 더해 다시 $sum에 저장함
  }
---> 반복문 종료 

  echo("1에서 {$num}까지의 합은 {$sum}입니다."); 
  // echo: 결과 문자열을 화면에 출력함
  // {$num}, {$sum}: 변수 안에 들어있는 실제 숫자를 문자열 속에 삽입함

  echo("<br>"); // 화면상에서 줄을 바꿈(HTML 태그 출력)

  show_source(__FILE__); 
  // show_source: 현재 실행 중인 파일의 소스 코드를 화면에 출력함
  // __FILE__: 현재 파일의 전체 경로를 의미하는 상수
?>
예시)
사용자가 만약 2의 숫자를 입력했다면?

1. 준비 단계 (초기화)
컴퓨터가 기억 장치에 빈 상자 하나를 만들고 이름을 붙인다
동작: $sum = 0;
상태: 현재 합계 상자($sum) 안에는 숫자 0이 들어 있다

2. 반복문 시작 (for문 진입)
이제 반복해서 일을 할 준비를 합니다. 여기서는 세 가지 설정이 동시에 작동한다
카운트 시작: $a = 1; (자, 이제 1번부터 숫자를 세기 시작할 거야!)
검사: $a <= $num; (현재 숫자 $a가 목표 숫자 $num보다 작거나 같니?)
현재 $a는 1이고, $num도 1이다
결과: "네, 같습니다." (참) → 안으로 들어간다

3. 더하기 계산 (첫 번째 바퀴)
검사를 통과했으니 중괄호 { } 안의 명령을 실행한다
명령: $sum = $sum + $a;
계산 과정: 1. 오른쪽을 먼저 계산한다: 현재 $sum(0) + 현재 $a(1) = 1 2. 이 결과값(1)을 다시 왼쪽의 $sum 상자에 넣는다
상태: 이제 $sum 상자에는 숫자 1이 들어 있다

4. 숫자 키우기 (증감식)
한 바퀴를 다 돌았으니 숫자를 하나 올린다
동작: $a++;
결과: $a는 원래 1이었는데, 1이 더해져서 2가 된다

5. 다시 검사하기 (반복 조건 확인)
숫자가 변했으니 다시 한번 반복할 수 있는지 확인합니다.
검사: $a <= $num;
상황: 현재 $a는 2이고, 목표 $num은 1입니다.
결과: "아니요, 2는 1보다 큽니다. 조건에 맞지 않습니다." (거짓)

6. 종료
조건이 맞지 않으므로 컴퓨터는 반복문(for) 밖으로 빠져나온다
최종 결과: $sum 상자에 최종적으로 저장된 값은 1이다