While 루프
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
While 루프는 조건식을 평가하여 참인 동안 코드 블록을 반복 실행하는 프로그래밍 구조이다. 다양한 프로그래밍 언어에서 사용되며, C, C++, Java, Python, JavaScript, Pascal, Visual Basic, Bourne 셸, Go 등에서 while 루프의 구문과 사용법이 조금씩 다르다. while 루프는 조건이 처음부터 거짓이면 실행되지 않으며, 루프 본체가 여러 문장으로 구성된 경우 블록을 사용한다. 루프 제어를 위해 break, continue 문 등을 사용할 수 있으며, 무한 루프를 만들 수도 있다. While은 할당, 순차적 구성, 조건문 및 while 문으로 구성된 간단한 프로그래밍 언어이며, 의미론의 명령형 프로그래밍 언어의 이론적 분석에 사용된다.
더 읽어볼만한 페이지
- 제어 흐름 - 프로그램 카운터
프로그램 카운터는 CPU 내에서 다음에 실행될 명령어의 주소를 저장하는 레지스터로, 명령어 사이클의 fetch 단계에서 사용되어 명령어를 가져오고 실행 후 갱신되며, CPU 성능 향상 기술과 현대 프로그래밍 모델에 영향을 미친다. - 제어 흐름 - 예외 처리
예외 처리는 프로그램 실행 중 예외 발생 시 정상적인 실행 흐름을 유지하거나 안전하게 종료하기 위한 메커니즘으로, 많은 프로그래밍 언어에서 제공하며 예외 안전성을 목표로 한다. - 프로그래밍 구성체 - 형 변환
형 변환은 프로그래밍에서 변수의 데이터 타입을 변경하는 것으로, 암시적 형 변환과 명시적 형 변환으로 나뉘며, 객체 지향 프로그래밍에서는 업캐스팅과 다운캐스팅이 발생하고, 각 언어는 고유한 규칙과 방법을 제공하며 잘못된 형 변환은 오류를 유발할 수 있다. - 프로그래밍 구성체 - 연산자 오버로딩
연산자 오버로딩은 프로그래밍 언어에서 기존 연산자를 사용자 정의 자료형에 대해 재정의하여 내장 자료형처럼 다루도록 하는 기능으로, 코드 가독성과 표현력을 높이지만 남용 시 코드 의미를 모호하게 만들 수 있다.
While 루프 | |
---|---|
일반 정보 | |
종류 | 제어 흐름 구문 |
사용 목적 | 조건이 충족될 때까지 코드 블록을 반복 실행 |
구문 (C-family) | |
설명 | |
조건 | 코드 블록 실행 여부를 결정하는 불린 표현식 |
코드 블록 | 조건이 참인 동안 반복적으로 실행되는 명령문 집합 |
동작 방식 | |
초기 평가 | 루프에 들어가기 전에 조건을 먼저 평가 |
실행 | 조건이 참이면 코드 블록을 실행 |
재평가 | 코드 블록 실행 후 조건을 다시 평가 |
반복 | 조건이 거짓이 될 때까지 실행 및 재평가 반복 |
특징 | |
진입 조건 루프 | 루프에 들어가기 전에 조건을 확인 |
0회 실행 가능 | 초기 조건이 거짓이면 코드 블록은 전혀 실행되지 않음 |
예시 (C++) | |
코드 | '#include |
설명 | count가 5보다 작을 동안 반복하며, count를 출력하고 1씩 증가 |
관련 구문 | |
Do-while 루프 | 조건이 루프 끝에서 평가되므로 최소 한 번은 실행 |
For 루프 | 초기화, 조건, 증감을 하나의 구문으로 결합 |
Foreach 루프 | 배열이나 컬렉션의 각 요소에 대해 반복 |
2. 구조
while 문은 코드 블록과 조건식으로 구성된다.[1] 조건식이 참이면 블록 안의 코드가 실행된다. 이 과정은 조건식이 거짓이 될 때까지 반복된다. while 루프는 블록 실행 전에 조건식을 확인하므로 '사전 검사 루프'라고도 불린다. 이는 루프 실행 후에 조건식을 검사하는 do while 루프와 대비된다.
`while` 문은 코드 블록과 조건/식으로 구성된다.[1] 조건/식의 평가 결과가 `true`이면,[1] 블록 내의 모든 코드가 실행된다. 이 과정은 조건/식이 false가 될 때까지 반복된다. `while` 루프는 블록 실행 전에 조건/식을 확인하기 때문에, 이 제어 구조는 종종 '''사전 검사 루프'''라고도 불린다. 루프를 실행한 `후`에 조건/식을 검사하는 ''do while'' 루프와 비교해 볼 수 있다.
C, Java, C#,[2] Objective-C, C++ 등에서는 다음과 같은 구조를 가진다.
```c
while (조건) {
문; // "루프 본체"
}
```
루프의 실행 순서는 다음과 같다.
1. "조건"을 평가한다. 조건이 거짓이면 루프를 종료한다.
2. "문"을 실행한다.
3. 다시 "조건"을 평가한다.
조건이 처음부터 거짓이면 "문"은 한 번도 실행되지 않는다. 루프 본체가 여러 문으로 구성된 경우, 블록을 사용한다.
```c
while (조건) {
...
}
```
예시:
```c
int x = 0;
while (x < 5) {
printf ("x = %d\n", x);
x++;
}
```
위 코드는 먼저 x가 5보다 작은지 확인하고, 참이면 루프 본체를 실행하여 `printf` 함수를 실행하고 x를 1 증가시킨다. 이 과정은 변수 x의 값이 5가 될 때까지 반복된다.
while 루프를 표현하는 다른 방법은 다음과 같다.
```c
while (true) {
if (!condition) break;
statements;
}
```
```c
goto TEST;
LOOPSTART:
statements;
TEST:
if (condition) goto LOOPSTART;
```
C 계열 언어에서 while 루프는 초기화나 셈식이 없는 for 루프로 표현할 수 있다.
```c
for ( ; condition; ) {
statements;
}
3. 다양한 프로그래밍 언어에서의 while 문
다음은 다양한 프로그래밍 언어에서 while 루프를 사용하여 숫자 5의 팩토리얼을 계산하는 예시이다.언어 코드 ActionScript Ada APL 5 AutoHotkey 스몰 베이직 CFScript 태그 포트란 Lua MATLAB Wolfram 언어 오베론, 오베론-2, 오베론-07, 컴포넌트 파스칼 MEL 님 Perl PHP PL/I Racket, Scheme 루비 Rust 스몰토크 count factorial | Swift Tcl VEX PowerShell
조건이 ''항상'' 참으로 평가되어 무한 루프를 생성하는 것이 가능하며, 경우에 따라 바람직할 수도 있다. 이러한 루프가 의도적으로 생성되는 경우, 일반적으로 루프의 종료를 제어하는 다른 제어 구조 (예: break 문)가 있다.
C언어 예시:
```c
while (true) {
if (someCondition)
break;
}
3. 1. C, C++, Java, C#, D
c
int counter = 5;
int factorial = 1;
while (counter > 1)
factorial *= counter--;
```
위 코드는 숫자 5의 팩토리얼을 계산하는 ''while'' 루프이다. 반복문에 대한 코드는 자바, C#, D에서 동일하다.
C 언어, C++, C#, D, Java, Perl 등에서는 다음과 같은 구문을 사용한다.
```c
while (조건)
문 // 이 부분을 "루프 본체"라고 부른다
```
이 루프의 실행은 다음과 같은 순서로 진행된다.
1. "조건"을 평가한다. "조건"이 거짓이면 루프를 종료한다.
2. "문"을 실행한다.
3. "조건"의 평가로 돌아간다.
"조건"이 처음부터 거짓인 경우에는 "문"은 한 번도 실행되지 않는다.
루프 본체가 여러 개의 문으로 구성된 경우, 블록 (복문)을 사용한다.
```c
while (조건) {
...
}
```
는
```c
while (true) {
if (!condition) break;
statements;
}
```
또는
```c
goto TEST;
LOOPSTART:
statements;
TEST:
if (condition) goto LOOPSTART;
```
와 같다.
또한 C 계열 언어에서 while 루프는 초기화나 셈식(counting expression)이 없는 for 루프이다.
```c
for ( ; condition; ) {
statements;
}
3. 2. Python
다음은 숫자 5의 팩토리얼을 계산하는 `while` 루프의 예시이다.
counter = 5 # 값을 5로 설정
factorial = 1 # 값을 1로 설정
while counter > 0: # counter(5)가 0보다 큰 동안
factorial *= counter # factorial의 새 값을 counter로 설정.
counter -= 1 # counter를 counter - 1로 설정.
print(factorial) # factorial의 값을 출력.
다음은 종료되지 않는 while 루프의 예시이다.
while True:
print("도와줘요! 저는 루프에 갇혔어요!")
3. 3. JavaScript
javascript
let counter = 5;
let factorial = 1;
while (counter > 1) {
factorial *= counter--;
}
console.log(factorial);
```
위 코드는 숫자 5의 팩토리얼을 계산하는 `while` 루프이다.
3. 4. Pascal
파스칼에는 '''while'''과 '''repeat-until''' 두 가지 형태의 while 루프가 있다. While 루프는 조건이 참인 동안 반복하고, repeat-until 문은 조건이 거짓이 될 때까지 반복한다. 주요 차이점은 while 루프는 조건이 처음에 거짓이면 0번 실행되지만, repeat-until 루프는 항상 최소한 한 번은 실행된다는 것이다.
파스칼에서 while 문은 C 언어 계열과 거의 동일하며, '''while'''과 '''do''' 키워드를 사용한다. do-while 문에 해당하는 repeat-until 문은 '''repeat'''과 '''until''' 키워드를 사용하며, 제어식으로 지속 조건이 아닌 종료 조건(참일 때 루프 종료)을 기술하는 점이 다르다.
while 조건 do 문
repeat 문; 문...; 문 until 조건
LL(1)의 단순한 구문을 위해 파스칼은 두 구문에 대해 완전히 다른 키워드를 사용하도록 설계했다.
while 구문은 여러 문장을 사용할 경우 begin-end로 묶어야 하지만, repeat-until은 그 자체가 암묵적인 블록 구문이므로 세미콜론으로 구분하여 여러 문장을 사용할 수 있다.
3. 5. Visual Basic
비주얼 베이직 .NET에서 While 문은 다음과 같은 구문을 갖는다.[8] 비주얼 베이직에서는 While...Wend였지만, VB.NET에서는 While...End While로 변경되었다.
```vbnet
While 조건
문...
[ (Continue|Exit) While ]
문...
End While
```
Exit While은 break 문에 해당하고, Continue While은 continue 문에 해당한다.
Do...Loop 문은 다음과 같은 구문을 갖는다.[9]
```vbnet
Do [(While|Until) 조건]
문...
[ (Continue|Exit) Do ]
문...
Loop [(While|Until) 조건]
```
Do 다음에 While을 붙이면 while 문에 해당하고, Loop 다음에 Until을 붙이면 파스칼의 repeat-until에 해당한다. 어느 쪽에도 조건을 붙이지 않으면 단순한 무한 루프가 된다.
3. 6. Bourne (Unix) shell
C 계열 언어에서 while 루프는 초기화나 셈식(counting expression)이 없는 for 루프와 같다.
for ( ; condition; ) {
statements;
}
3. 7. Go
go
counter, factorial := 5, 1
for counter > 1 {
counter, factorial = counter-1, factorial*counter
}
```
이 코드는 Go에서 팩토리얼을 계산하는 예시이다. Go는 `while` 문이 없지만, `for` 문의 일부 요소를 생략하여 `while` 문처럼 사용할 수 있다. 위 코드는 숫자 5의 팩토리얼을 계산한다.
4. 루프 제어
`while` 문은 코드 블록과 조건/식으로 구성된다.[1] 조건/식의 평가 결과가 참(`true`)이면,[1] 블록 내의 모든 코드가 실행된다. 이 과정은 조건/식이 거짓(`false`)이 될 때까지 반복된다. `while` 루프는 블록 실행 전에 조건/식을 확인하기 때문에, '''사전 검사 루프'''라고도 불린다.
break 문은 루프를 즉시 종료시키고, continue 문은 루프의 나머지 부분을 건너뛰고 다음 반복을 시작하게 한다.[7]
goto 문을 사용할 수 있는 언어에서는 while 루프를 탈출하기 위해 goto 문을 사용할 수도 있다. 일반적으로 break 문을 사용하는 것이 더 좋지만, 다중 루프를 탈출하는 경우 등에서는 goto 문을 사용하는 것이 더 간결하게 표현할 수 있다. return 문이나 예외 발생을 통해 루프를 탈출할 수 있는 언어도 있다.
4. 1. 무한 루프
조건식이 항상 참으로 평가되면 while 루프는 무한히 반복된다. 의도적으로 무한 루프를 만들고, 루프 안에서 특정 조건이 충족되면 break 문을 사용하여 루프를 종료하는 방식을 사용하기도 한다.[1]다음은 무한 루프의 예시이다.
while (true) {
// 복잡한 작업 수행
if (someCondition)
break;
// 추가 작업
}
5. While (language)
While[3]은 할당, 순차적 구성, 조건문 및 while 문으로 구성된 간단한 프로그래밍 언어이며, 의미론의 명령형 프로그래밍 언어의 이론적 분석에 사용된다.[4][5]
```while
C := 5;
F := 1;
while (C > 1) do
F := F * C;
C := C - 1;
참조
[1]
웹사이트
The while and do-while Statements (The Java Tutorials > Learning the Java Language > Language Basics)
http://docs.oracle.c[...]
2016-10-21
[2]
웹사이트
while (C# reference)
http://msdn.microsof[...]
2016-10-21
[3]
웹사이트
Chapter 3: The While programming language
http://profs.sci.uni[...]
2016-10-21
[4]
서적
Principles of Program Analysis
https://books.google[...]
Springer
2013-05-29
[5]
서적
Dictionary of Computing
https://archive.org/[...]
Oxford University Press
1997-12-11
[6]
간행물
JIS X 3010:2003「プログラム言語C」§6.8.5「繰返し文」
[7]
간행물
JIS X 3010:2003「プログラム言語C」§6.8.6.2「continue文」
[8]
Microsoft Docs
While...End While Statement (Visual Basic)
https://docs.microso[...]
[9]
Microsoft Docs
Do...Loop Statement (Visual Basic)
https://docs.microso[...]
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com