for 루프

컴퓨터 프로그래밍에서 for 루프는 반복문의 일종으로, 특정한 부분의 코드가 반복적으로 수행될 수 있도록 한다. for 루프는 while 루프 반복문과는 달리 일반적으로 해당 루프에 연계된 루프 변수가 존재하며, 그 변수의 비교 및 증감을 위해서 별도의 문법을 할애한다.
for 루프의 이름은 영어 표현 “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
임의의 집합
이 종류의 for 루프는 흔히 foreach 루프라고 불리며, 숫자 범위 뿐만 아니라 특정한 집합 또는 목록 안에 있는 원소들을 순서대로 루프 변수에 대입하여 안쪽 코드를 실행하는 형식으로 이루어져 있다.
파이썬은 이 형태의 for 루프 이외에 다른 형태의 문법을 가지고 있지 않은 것으로 잘 알려져 있다. 파이썬에서 숫자 범위를 사용해서 for 루프를 흉내내려면 배열을 반환하는 range 함수(또는 반복자만을 구현하는 xrange 자료형)를 사용하여 다음과 같이 쓸 수 있다.
for i in range(1, 11, 3):
print i
반면 많은 다른 언어들은 숫자 범위를 사용하는 형태와 집합을 사용하는 형태 두 가지 모두 지원하며, 전자를 for, 후자를 foreach라는 예약어로 구분하곤 한다. PHP나 C#가 대표적이다.
조건절의 추가
일부 언어들은 보통의 for 루프에 while 루프와 같은 조건절을 추가하기도 한다. 이런 형태의 문법은 ALGOL 68에서 처음 소개되고 PL/I에서도 사용되었다. 다음의 ALGOL 68 코드는 1부터 42까지 3씩 증가하며 반복하되, i가 10보다 크면 반복을 중단한다. (따라서 앞의 코드들과 같이 1, 4, 7, 10만을 출력한다.)
for i from 1 by 3 to 42 while i≤10
do
print((i,newline));
od초기화-조건식-증감문 형식
이 종류의 for 루프는 C로부터 유래한 문법을 사용하는 대부분의 언어들이 지원하며, 세 개의 식 내지는 문장으로 루프를 정의한다.
- 초기화: 루프 안에서 사용할 변수를 초기화한다. C++의 경우
int i = 0과 같이 지역 변수를 선언하면서 초기화하는 것도 가능하다. - 조건식: 루프 안쪽 코드가 실행되기 전에 참인지의 여부가 검사되며, 참이 아니면 루프를 종료한다. 이 식은 초기화 직후에도 평가될 수 있다.
- 증감문: 루프 안쪽 코드가 실행된 후에 실행되는 문장이다. 보통 루프 변수를 증감시키는 용도로 쓰인다.
다음의 C++ 코드는 초기화, 조건식, 증감문을 모두 사용하는 예제이다.
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);
각 식은 아무것도 없이 세미콜론 구분자만을 둬서 생략할 수 있다. 만약 조건식이 생략되면, 조건식은 항상 참으로 평가되며 이는 무한 루프를 구현하는 데 사용된다. 다음은 세 식을 모두 생략하여 같은 의미를 구현한 것이다.
int i = 1;
for (;;) {
printf("%d\n", i);
i += 3;
if (i > 10) break;
}
문법과 의미론
for 루프는 루프 변수의 초기화나 증감 과정을 안쪽 코드에 명시적으로 집어 넣고 조건문만을 남겨서 while 루프로 변환할 수 있다. 다만 일부 경우, 변수를 접근할 수 있는 코드 영역이 변환 도중 바뀔 수 있기 때문에 주의를 요한다.
C 계열의 언어들이 제공하는 break 문이나 continue 문과 같이, 일부 언어는 루프를 도중에 중단하거나 뒤에 실행될 코드를 뛰어 넘고 증감문 또는 조건 검사로 바로 넘어 가는 명령을 지원하기도 한다.
파이썬과 같은 언어는 for 루프가 break 문과 같은 다른 명령에 의하여 갑작스럽게 종료되지 않고, 조건문이 실패하여 ‘평범하게’ 종료되는 경우에 한해 실행되는 코드를 지정해 줄 수 있다.
예제
#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;
}
응용
#include <stdio.h>
int main(void){
int i = 5;
int n = 5;
for(;n;){ // n이 0 이외의 경우 계속 돌아감. 0이 입력될 때까지 프로그램은 종료되지 않음
printf("아무 수나 입력하세요 : ");
scanf("%d", &n);
}
return 0;
}
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
같이 보기
- 문법 강조 오류가 있는 문서
- 영어 표기를 포함한 문서
- 위키데이터 속성 P18을 사용하는 문서
- 위키데이터 속성 P41을 사용하는 문서
- 위키데이터 속성 P94를 사용하는 문서
- 위키데이터 속성 P117을 사용하는 문서
- 위키데이터 속성 P154를 사용하는 문서
- 위키데이터 속성 P213을 사용하는 문서
- 위키데이터 속성 P227을 사용하는 문서
- 위키데이터 속성 P242를 사용하는 문서
- 위키데이터 속성 P244를 사용하는 문서
- 위키데이터 속성 P245를 사용하는 문서
- 위키데이터 속성 P268을 사용하는 문서
- 위키데이터 속성 P269를 사용하는 문서
- 위키데이터 속성 P271을 사용하는 문서
- 위키데이터 속성 P347을 사용하는 문서
- 위키데이터 속성 P349를 사용하는 문서
- 위키데이터 속성 P350을 사용하는 문서
- 위키데이터 속성 P373을 사용하는 문서
- 위키데이터 속성 P380을 사용하는 문서
- 위키데이터 속성 P396을 사용하는 문서
- 위키데이터 속성 P409를 사용하는 문서
- 위키데이터 속성 P428을 사용하는 문서
- 위키데이터 속성 P434를 사용하는 문서
- 위키데이터 속성 P435를 사용하는 문서
- 위키데이터 속성 P436을 사용하는 문서
- 위키데이터 속성 P454를 사용하는 문서
- 위키데이터 속성 P496을 사용하는 문서
- 위키데이터 속성 P549를 사용하는 문서
- 위키데이터 속성 P650을 사용하는 문서
- 위키데이터 속성 P651을 사용하는 문서
- 위키데이터 속성 P691을 사용하는 문서
- 위키데이터 속성 P716을 사용하는 문서
- 위키데이터 속성 P781을 사용하는 문서
- 위키데이터 속성 P791을 사용하는 문서
- 위키데이터 속성 P864를 사용하는 문서
- 위키데이터 속성 P865를 사용하는 문서
- 위키데이터 속성 P886을 사용하는 문서
- 위키데이터 속성 P902를 사용하는 문서
- 위키데이터 속성 P906을 사용하는 문서
- 위키데이터 속성 P947을 사용하는 문서
- 위키데이터 속성 P950을 사용하는 문서
- 위키데이터 속성 P966을 사용하는 문서
- 위키데이터 속성 P982를 사용하는 문서
- 위키데이터 속성 P1003을 사용하는 문서
- 위키데이터 속성 P1004를 사용하는 문서
- 위키데이터 속성 P1005를 사용하는 문서
- 위키데이터 속성 P1006을 사용하는 문서
- 위키데이터 속성 P1015를 사용하는 문서
- 위키데이터 속성 P1045를 사용하는 문서
- 위키데이터 속성 P1048을 사용하는 문서
- 위키데이터 속성 P1053을 사용하는 문서
- 위키데이터 속성 P1146을 사용하는 문서
- 위키데이터 속성 P1153을 사용하는 문서
- 위키데이터 속성 P1157을 사용하는 문서
- 위키데이터 속성 P1186을 사용하는 문서
- 위키데이터 속성 P1225를 사용하는 문서
- 위키데이터 속성 P1248을 사용하는 문서
- 위키데이터 속성 P1273을 사용하는 문서
- 위키데이터 속성 P1315를 사용하는 문서
- 위키데이터 속성 P1323을 사용하는 문서
- 위키데이터 속성 P1330을 사용하는 문서
- 위키데이터 속성 P1362를 사용하는 문서
- 위키데이터 속성 P1368을 사용하는 문서
- 위키데이터 속성 P1375를 사용하는 문서
- 위키데이터 속성 P1407을 사용하는 문서
- 위키데이터 속성 P1556을 사용하는 문서
- 위키데이터 속성 P1584를 사용하는 문서
- 위키데이터 속성 P1695를 사용하는 문서
- 위키데이터 속성 P1707을 사용하는 문서
- 위키데이터 속성 P1736을 사용하는 문서
- 위키데이터 속성 P1886을 사용하는 문서
- 위키데이터 속성 P1890을 사용하는 문서
- 위키데이터 속성 P1907을 사용하는 문서
- 위키데이터 속성 P1908을 사용하는 문서
- 위키데이터 속성 P1960을 사용하는 문서
- 위키데이터 속성 P1986을 사용하는 문서
- 위키데이터 속성 P2041을 사용하는 문서
- 위키데이터 속성 P2163을 사용하는 문서
- 위키데이터 속성 P2174를 사용하는 문서
- 위키데이터 속성 P2268을 사용하는 문서
- 위키데이터 속성 P2349를 사용하는 문서
- 위키데이터 속성 P2418을 사용하는 문서
- 위키데이터 속성 P2456을 사용하는 문서
- 위키데이터 속성 P2484를 사용하는 문서
- 위키데이터 속성 P2558을 사용하는 문서
- 위키데이터 속성 P2750을 사용하는 문서
- 위키데이터 속성 P2980을 사용하는 문서
- 위키데이터 속성 P3223을 사용하는 문서
- 위키데이터 속성 P3233을 사용하는 문서
- 위키데이터 속성 P3348을 사용하는 문서
- 위키데이터 속성 P3372를 사용하는 문서
- 위키데이터 속성 P3407을 사용하는 문서
- 위키데이터 속성 P3430을 사용하는 문서
- 위키데이터 속성 P3544를 사용하는 문서
- 위키데이터 속성 P3562를 사용하는 문서
- 위키데이터 속성 P3563을 사용하는 문서
- 위키데이터 속성 P3601을 사용하는 문서
- 위키데이터 속성 P3723을 사용하는 문서
- 위키데이터 속성 P3788을 사용하는 문서
- 위키데이터 속성 P3829를 사용하는 문서
- 위키데이터 속성 P3863을 사용하는 문서
- 위키데이터 속성 P3920을 사용하는 문서
- 위키데이터 속성 P3993을 사용하는 문서
- 위키데이터 속성 P4038을 사용하는 문서
- 위키데이터 속성 P4055를 사용하는 문서
- 위키데이터 속성 P4114를 사용하는 문서
- 위키데이터 속성 P4143을 사용하는 문서
- 위키데이터 속성 P4186을 사용하는 문서
- 위키데이터 속성 P4423을 사용하는 문서
- 위키데이터 속성 P4457을 사용하는 문서
- 위키데이터 속성 P4534를 사용하는 문서
- 위키데이터 속성 P4535를 사용하는 문서
- 위키데이터 속성 P4581을 사용하는 문서
- 위키데이터 속성 P4613을 사용하는 문서
- 위키데이터 속성 P4955를 사용하는 문서
- 위키데이터 속성 P5034를 사용하는 문서
- 위키데이터 속성 P5226을 사용하는 문서
- 위키데이터 속성 P5288을 사용하는 문서
- 위키데이터 속성 P5302를 사용하는 문서
- 위키데이터 속성 P5321을 사용하는 문서
- 위키데이터 속성 P5368을 사용하는 문서
- 위키데이터 속성 P5504를 사용하는 문서
- 위키데이터 속성 P5587을 사용하는 문서
- 위키데이터 속성 P5736을 사용하는 문서
- 위키데이터 속성 P5818을 사용하는 문서
- 위키데이터 속성 P6213을 사용하는 문서
- 위키데이터 속성 P6734를 사용하는 문서
- 위키데이터 속성 P6792를 사용하는 문서
- 위키데이터 속성 P6804를 사용하는 문서
- 위키데이터 속성 P6829를 사용하는 문서
- 위키데이터 속성 P7293을 사용하는 문서
- 위키데이터 속성 P7303을 사용하는 문서
- 위키데이터 속성 P7314를 사용하는 문서
- 위키데이터 속성 P7902를 사용하는 문서
- 위키데이터 속성 P8034를 사용하는 문서
- 위키데이터 속성 P8189를 사용하는 문서
- 위키데이터 속성 P8381을 사용하는 문서
- 위키데이터 속성 P8671을 사용하는 문서
- 위키데이터 속성 P8980을 사용하는 문서
- 위키데이터 속성 P9070을 사용하는 문서
- 위키데이터 속성 P9692를 사용하는 문서
- 위키데이터 속성 P9725를 사용하는 문서
- 위키데이터 속성 P9984를 사용하는 문서
- 위키데이터 속성 P10020을 사용하는 문서
- 위키데이터 속성 P10299를 사용하는 문서
- 위키데이터 속성 P10608을 사용하는 문서
- 위키데이터 속성 P10832를 사용하는 문서
- 위키데이터 속성 P11249를 사용하는 문서
- 위키데이터 속성 P11646을 사용하는 문서
- 위키데이터 속성 P11729를 사용하는 문서
- 위키데이터 속성 P12204를 사용하는 문서
- 위키데이터 속성 P12362를 사용하는 문서
- 위키데이터 속성 P12754를 사용하는 문서
- 위키데이터 속성 P13049를 사용하는 문서
- 제어 흐름