Do...Loop 문(Visual Basic)

Boolean 조건이 True인 동안 또는 해당 조건이 True가 될 때까지 문의 블록을 반복합니다.

Do { While | Until } condition
    [ statements ]
    [ Exit Do ]
    [ statements ]
Loop
-or-
Do
    [ statements ]
    [ Exit Do ]
    [ statements ]
Loop { While | Until } condition

구성 요소

용어

내용

Do

필수적 요소로서, Do 루프의 정의를 시작합니다.

While

Until이 사용되지 않는 경우 필수적 요소입니다. condition이 False가 될 때까지 루프를 반복합니다.

Until

While이 사용되지 않는 경우 필수적 요소입니다. condition이 True가 될 때까지 루프를 반복합니다.

condition

선택적 요소로서, Boolean 식입니다. condition이 Nothing이면 Visual Basic에서 False로 간주합니다.

statements

선택적 요소로서, condition이 True인 동안 또는 True가 될 때까지 반복되는 하나 이상의 문입니다.

Exit Do

선택적 요소로서, Do 루프 밖으로 제어를 전송합니다.

Loop

필수적 요소로서, Do 루프의 정의를 끝냅니다.

설명

조건이 충족될 때까지 문을 무한히 반복하려면 Do...Loop 구조를 사용합니다. 문을 지정된 횟수만큼 반복하려면 For...Next 문을 사용하는 것이 좋습니다.

While 또는 Until 중 하나를 사용하여 condition을 지정할 수 있으며 둘 다 사용할 수는 없습니다.

루프의 시작 부분이나 끝 부분에서 condition을 한 번만 테스트할 수 있습니다. 루프의 시작 부분에 있는 Do 문에서 condition을 테스트하는 경우 루프가 한 번도 실행되지 않을 수 있습니다. Loop 문의 루프 끝 부분에서 테스트하는 경우 루프는 항상 한 번 이상 실행됩니다.

조건은 일반적으로 두 값을 비교해서 지정됩니다. 그러나 Boolean 데이터 형식(Visual Basic) 값(True 또는 False)이 되는 식도 조건이 될 수 있으며, 이런 경우 Boolean으로 변환된 다른 데이터 형식(예: 숫자 형식)의 값을 포함합니다.

한 루프를 다른 루프 내에 배치하여 Do 루프를 서로 중첩할 수 있습니다. 또한 다른 종류의 제어 구조를 서로 중첩할 수 있습니다. 자세한 내용은 중첩 제어 구조(Visual Basic)을 참조하십시오.

참고

Do...Loop 구조를 사용하면 condition이 True에서 변경된 경우 또는 처음으로 True가 된 경우에 루프를 끝낼지 여부를 결정할 수 있으므로 While...End While 문(Visual Basic)을 사용하는 것보다 더 융통성 있습니다. 또한 루프의 시작 부분이나 끝 부분에서 condition을 테스트할 수 있습니다.

Exit Do

Exit Do 문은 Do…Loop를 종료하기 위한 대체 방법을 제공할 수 있습니다. Exit Do를 사용하면 제어가 Loop 문 다음 문으로 바로 전달됩니다.

Exit Do는 If...Then...Else 구조와 마찬가지로 주로 일부 조건을 계산한 후에 사용됩니다. 예를 들어, 잘못된 값이나 종료 요청과 같이 계속 반복할 필요가 없거나 반복할 수 없는 조건을 발견하면 루프를 끝내야 할 수 있습니다. Exit Do를 사용하여 조건이 무한 루프 상태가 되는지 여부를 테스트할 수도 있습니다. 무한 루프란 매우 많이 또는 무한정 실행되는 루프를 말합니다. Exit Do를 사용하여 루프를 빠져 나올 수 있습니다.

Do…Loop의 아무 위치에 임의 수의 Exit Do 문을 포함시킬 수 있습니다.

중첩된 Do 루프 내에 Exit Do를 사용하면 Exit Do는 가장 안쪽 루프 밖의 제어를 중첩 수준이 그 다음으로 높은 루프에 전달합니다.

예제

다음 예에서 루프의 문은 index 변수가 10보다 커질 때까지 계속 실행됩니다. 루프의 끝에 Until 절이 있습니다.

Dim index As Integer = 0
Do
    Debug.Write(index.ToString & " ")
    index += 1
Loop Until index > 10

Debug.WriteLine("")
' Output: 0 1 2 3 4 5 6 7 8 9 10 

다음 예제에서는 Until 절 대신 While 절을 사용하며 루프의 끝 부분이 아닌 시작 부분에서 condition을 테스트합니다.

Dim index As Integer = 0
Do While index <= 10
    Debug.Write(index.ToString & " ")
    index += 1
Loop

Debug.WriteLine("")
' Output: 0 1 2 3 4 5 6 7 8 9 10 

다음 예에서는 index 변수가 100보다 클 때 condition이 루프를 정지합니다. 하지만 루프에 If 문을 사용하면 인덱스 변수가 10보다 커질 때 Exit Do 문이 루프를 중단합니다.

Dim index As Integer = 0
Do While index <= 100
    If index > 10 Then
        Exit Do
    End If

    Debug.Write(index.ToString & " ")
    index += 1
Loop

Debug.WriteLine("")
' Output: 0 1 2 3 4 5 6 7 8 9 10 

다음 예제에서는 텍스트 파일의 모든 줄을 읽습니다. OpenText 메서드는 파일을 열고 문자를 읽는 StreamReader를 반환합니다. Do...Loop 조건에서 StreamReaderPeek 메서드는 추가 문자가 있는지 여부를 판단합니다.

Private Sub ShowText(ByVal textFilePath As String)
    If System.IO.File.Exists(textFilePath) = False Then
        Debug.WriteLine("File Not Found: " & textFilePath)
    Else
        Dim sr As System.IO.StreamReader = System.IO.File.OpenText(textFilePath)

        Do While sr.Peek() >= 0
            Debug.WriteLine(sr.ReadLine())
        Loop

        sr.Close()
    End If
End Sub

참고 항목

작업

방법: 루프 성능 개선(Visual Basic)

참조

For...Next 문(Visual Basic)

Boolean 데이터 형식(Visual Basic)

Exit 문(Visual Basic)

While...End While 문(Visual Basic)

개념

루프 구조(Visual Basic)

중첩 제어 구조(Visual Basic)

변경 기록

날짜

변경 내용

이유

2011년 1월

비고를 재구성하고 예제를 추가했습니다.

향상된 기능 관련 정보