{{위키데이터 속성 추적}}
{{소문자}}
{{루프 구성체}}
[[파일:For-loop-diagram.png|섬네일|right|For 루프 플로 다이어그램]]
[[컴퓨터 프로그래밍]]에서 '''for 루프'''는 [[반복문]]의 일종으로, 특정한 부분의 코드가 반복적으로 수행될 수 있도록 한다. for 루프는 [[while 루프]]와 같은 다른 반복문과는 달리 일반적으로 해당 루프에 연계된 [[루프 변수]]가 존재하며, 그 변수의 비교 및 증감을 위해서 별도의 문법을 할애한 점이 구분된다.

for 루프의 이름은 영어 표현 “{{lang|en|For …, do …}}”(…동안 …를 하라)에서 유래하였다. [[포트란]]과 같은 언어에서는 for 대신 do [[예약어]]를 사용하며 그 문법의 이름도 '''do 루프'''이지만, 이를 제외하고는 for 루프와 큰 차이가 없다.

== 종류 ==

for 루프는 대부분의 [[명령형 프로그래밍 언어]]에서 기본적으로 지원된다. 그러나 각 언어 별로 지원하는 for 문의 종류는 반복문인 것을 제외하고는 다음의 여러 가지로 나뉜다.

=== 숫자 범위 ===

이 종류의 for 루프는 특정한 루프 변수에 주어진 숫자 범위, 좀 더 정확하게는 [[등차수열]] 안의 숫자들을 대입하여 안쪽 코드를 실행하는 형식으로 이루어져 있다. 숫자 범위는 시작점과 끝점으로 대표되며, 보통은 시작점부터 1씩 커져 끝점보다 작지 않을 때까지 루프가 수행되지만 1 대신 증감될 값을 직접 선택해서 루프를 반대로 수행하거나 하는 것이 가능한 경우도 있다.

많은 [[베이직]] 계열 언어들과 [[포트란]] 등이 이 형태의 for 문을 지원한다. 예를 들어 다음 베이직 코드는 1부터 시작해서 10으로 끝나고, 3씩 차이 나는 숫자들(즉 1, 4, 7, 10)을 출력한다.

 '''FOR''' ''I'' = 1 '''TO''' 10 '''STEP''' 3
     '''PRINT''' ''I''
 '''NEXT''' ''I''

=== 임의의 집합 ===
{{본문|foreach 루프}}

이 종류의 for 루프는 흔히 foreach 루프라고 불리며, 숫자 범위 뿐만 아니라 특정한 집합 또는 목록 안에 있는 원소들을 순서대로 루프 변수에 대입하여 안쪽 코드를 실행하는 형식으로 이루어져 있다.

[[파이썬]]은 이 형태의 for 루프 이외에 다른 형태의 문법을 가지고 있지 않은 것으로 잘 알려져 있다. 파이썬에서 숫자 범위를 사용해서 for 루프를 흉내내려면 배열을 반환하는 <code>range</code> 함수(또는 [[반복자]]만을 구현하는 <code>xrange</code> 자료형)를 사용하여 다음과 같이 쓸 수 있다.
<syntaxhighlight lang="python">
for i in range(1, 11, 3):
    print i
</syntaxhighlight>

반면 많은 다른 언어들은 숫자 범위를 사용하는 형태와 집합을 사용하는 형태 두 가지 모두 지원하며, 전자를 for, 후자를 foreach라는 예약어로 구분하곤 한다. [[PHP]]나 [[C 샤프|C#]]가 대표적이다.

=== 조건절의 추가 ===

일부 언어들은 보통의 for 루프에 while 루프와 같은 조건절을 추가하기도 한다. 이런 형태의 문법은 [[ALGOL 68]]에서 처음 소개되고 [[PL/I]]에서도 사용되었다. 다음의 ALGOL 68 코드는 1부터 42까지 3씩 증가하며 반복하되, i가 10보다 크면 반복을 중단한다. (따라서 앞의 코드들과 같이 1, 4, 7, 10만을 출력한다.)
<syntaxhighlight lang="algol68">
for i from 1 by 3 to 42 while i≤10
do
  print((i,newline));
od
</syntaxhighlight>

=== 초기화-조건식-증감문 형식 ===
[[파일:For-loop-diagram.png|섬네일|170px|초기화-조건식-증감문으로 이루어진 for 루프의 동작]]

이 종류의 for 루프는 [[C (프로그래밍 언어)|C]]로부터 유래한 문법을 사용하는 대부분의 언어들이 지원하며, 세 개의 식 내지는 문장으로 루프를 정의한다.
* 초기화: 루프 안에서 사용할 변수를 초기화한다. [[C++]]의 경우 <code>int i = 0</code>과 같이 지역 변수를 선언하면서 초기화하는 것도 가능하다.
* 조건식: 루프 안쪽 코드가 실행되기 전에 참인지의 여부가 검사되며, 참이 아니면 루프를 종료한다. 이 식은 초기화 직후에도 평가될 수 있다.
* 증감문: 루프 안쪽 코드가 실행된 후에 실행되는 문장이다. 보통 루프 변수를 증감시키는 용도로 쓰인다.

다음의 C++ 코드는 초기화, 조건식, 증감문을 모두 사용하는 예제이다.
<syntaxhighlight lang="cpp">
for (int i = 1; i <= 10; i += 3)
    printf("%d\n", i);

/* C의 경우 다음 코드가 필요하다. */
int i;
for (i = 1; i <= 10; i += 3)
    printf("%d\n", i);
</syntaxhighlight>

각 식은 아무것도 없이 [[세미콜론]] 구분자만을 둬서 생략할 수 있다. 만약 조건식이 생략되면, 조건식은 항상 참으로 평가되며 이는 [[무한 루프]]를 구현하는 데 사용된다. 다음은 세 식을 모두 생략하여 같은 의미를 구현한 것이다.
<syntaxhighlight lang="cpp" line="1">
int i = 1;
for (;;) {
    printf("%d\n", i);
    i += 3;
    if (i > 10) break;
}
</syntaxhighlight>

== 문법과 의미론 ==
for 루프는 루프 변수의 초기화나 증감 과정을 안쪽 코드에 명시적으로 집어 넣고 조건문만을 남겨서 [[while 루프]]로 변환할 수 있다. 다만 일부 경우, 변수를 접근할 수 있는 코드 영역이 변환 도중 바뀔 수 있기 때문에 주의를 요한다.

C 계열의 언어들이 제공하는 [[break 문]]이나 [[continue 문]]과 같이, 일부 언어는 루프를 도중에 중단하거나 뒤에 실행될 코드를 뛰어 넘고 증감문 또는 조건 검사로 바로 넘어 가는 명령을 지원하기도 한다.

[[파이썬]]과 같은 언어는 for 루프가 break 문과 같은 다른 명령에 의하여 갑작스럽게 종료되지 않고, 조건문이 실패하여 ‘평범하게’ 종료되는 경우에 한해 실행되는 코드를 지정해 줄 수 있다.

== 예제 ==
=== [[C 언어]] ===
<syntaxhighlight lang="c" line="1">
#include <stdio.h>

int main(void){
    int i = 5;                //i는 5이다.
    int n = 5;                //n는 5이다.

    for(i=1; i <= n; i++) {   // i는 1부터 시작해서 n까지 1씩 증가한다.
        printf("Hello!\n");   // hello를 출력한다
    }                         // 이 for문이 끝나면 콘솔 창에는 hello 가 5번 출력된다.
    return 0;
}
</syntaxhighlight>

==== 응용 ====
<syntaxhighlight lang="c" line="1">
#include <stdio.h>

int main(void){
    int i = 5;
    int n = 5;

    for(;n;){ // n이 0 이외의 경우 계속 돌아감. 0이 입력될 때까지 프로그램은 종료되지 않음
        printf("아무 수나 입력하세요 : ");
        scanf("%d", &n);
    }
    return 0;
}
</syntaxhighlight>

=== [[비주얼 베이직]] ===
<syntaxhighlight lang="vb" line="1">
Sub Main()
    Dim I,N As Integer
    N = 5 'N을 5로 바꿈
    For I = 1 To N Step 1 'I는 1부터 시작해서 N까지 1씩 증가한다.
        Debug.Print("hello")
    Next I
End Sub
</syntaxhighlight>

== 같이 보기 ==
* [[while 루프]]
* [[do-while 루프]]
* [[foreach 루프]]

{{프로그래밍 구성체}}

[[분류:제어 흐름]]