Sub 문(Visual Basic)

업데이트: 2007년 11월

Sub 프로시저를 정의하는 이름, 매개 변수 및 코드를 선언합니다.

[ <attributelist> ] [ Partial ] [ accessmodifier ] [ proceduremodifiers ] [ Shared ] [ Shadows ] 
Sub name [ (Of typeparamlist) ] [ (parameterlist) ] [ Implements implementslist | Handles eventlist ]
    [ statements ]
    [ Exit Sub ]
    [ statements ]
End Sub

구성 요소

  • attributelist
    선택적 요소. 특성 목록을 참조하십시오.

  • Partial
    선택적 요소. 부분 메서드(Partial Method)의 정의를 나타냅니다. 자세한 내용은 부분 메서드를 참조하십시오.

  • accessmodifier
    선택적 요소. 다음 중 하나일 수 있습니다.

    Visual Basic의 액세스 수준을 참조하십시오.

  • proceduremodifiers
    선택적 요소. 다음 중 하나일 수 있습니다.

  • Shared
    선택적 요소. Shared를 참조하십시오.

  • Shadows
    선택적 요소. Shadows를 참조하십시오.

  • name
    필수적 요소. 프로시저의 이름입니다. 선언 요소 이름을 참조하십시오.

  • typeparamlist
    선택적 요소. 제네릭 프로시저의 형식 매개 변수 목록입니다. 형식 목록을 참조하십시오.

  • parameterlist
    선택적 요소. 이 프로시저의 매개 변수를 나타내는 지역 변수 이름의 목록입니다. 매개 변수 목록을 참조하십시오.

  • Implements
    선택적 요소. 이 프로시저에서 하나 이상의 Sub 프로시저를 구현하며 각 프로시저가 이 프로시저의 포함하는 클래스 또는 구조체에 의해 구현되는 인터페이스에 정의되었음을 나타냅니다. Implements 문을 참조하십시오.

  • implementslist
    Implements문을 사용할 경우 필수적 요소입니다. 구현할 Sub 프로시저의 목록입니다.

    implementedprocedure [ , implementedprocedure ... ]

    각 implementedprocedure의 구문과 구성 요소는 다음과 같습니다.

    interface.definedname

    구성 요소

    설명

    interface

    필수적 요소. 이 프로시저의 포함하는 클래스 또는 구조체에 의해 구현되는 인터페이스의 이름입니다.

    definedname

    필수적 요소. 프로시저를 interface에 정의할 때 사용되는 이름입니다.

  • Handles
    선택적 요소. 이 프로시저에서 하나 이상의 특정 이벤트를 처리할 수 있음을 나타냅니다. Handles를 참조하십시오.

  • eventlist
    Handles를 제공하는 경우 필수적 요소입니다. 이 프로시저에서 처리하는 이벤트 목록입니다.

    eventspecifier [ , eventspecifier ... ]

    각 eventspecifier의 구문과 구성 요소는 다음과 같습니다.

    eventvariable.event

    구성 요소

    설명

    eventvariable

    필수적 요소. 이벤트를 발생시키는 클래스 또는 구조체의 데이터 형식으로 선언된 개체 변수입니다.

    event

    필수적 요소. 이 프로시저에서 처리하는 이벤트의 이름입니다.

  • statements
    선택적 요소. 이 프로시저 내에서 실행될 문 블록입니다.

  • EndSub
    이 프로시저의 정의를 종료합니다.

설명

모든 실행 코드는 프로시저 내에 있어야 합니다. 호출 코드에 값을 반환할 필요가 없을 때 Sub 프로시저를 사용하고 값을 반환할 때 Function 프로시저를 사용합니다.

Sub는 모듈 수준에서만 사용할 수 있습니다. 즉, sub 프로시저의 선언 컨텍스트는 클래스, 구조체 , 모듈 또는 인터페이스여야 하며 소스 파일, 네임스페이스, 프로시저 또는 블록이 될 수 없습니다. 자세한 내용은 선언 컨텍스트 및 기본 액세스 수준을 참조하십시오.

Sub 프로시저는 기본적으로 공용 액세스입니다. 액세스 한정자를 사용하여 액세스 수준을 조정할 수 있습니다.

규칙

  • 구현. 이 프로시저가 Implements 키워드를 사용하는 경우 포함하는 클래스 또는 구조체에 대한 Implements 문은 해당 Class 또는 Structure 문 바로 다음에 나와야 합니다. Implements 문에는 implementslist에 지정된 각 인터페이스가 포함되어야 합니다. 그러나 인터페이스가 definedname에서 Sub을 정의할 때 사용하는 이름이 name에서의 이 프로시저의 이름과 같을 필요는 없습니다.

동작

  • **프로시저에서 반환.**Sub 프로시저가 호출 코드로 반환되는 경우 해당 프로시저를 호출한 문 다음에 오는 문에서 실행이 계속됩니다.

    Exit Sub 및 Return 문은 Sub 프로시저를 즉시 끝냅니다. 프로시저 내의 임의의 위치에 여러 개의 Exit Sub 및 Return 문을 사용할 수 있으며 Exit Sub 문과 Return 문을 혼합하여 사용할 수 있습니다.

    다음 예제에서는 Sub 프로시저에서의 반환을 보여 줍니다.

    Sub mySub(ByVal q As String)
        Return
    End Sub 
    
  • **프로시저 호출.**Sub 프로시저도 Function 프로시저처럼 여러 매개 변수를 사용하고 여러 문을 수행하는 별도의 프로시저입니다. 그러나 값을 반환하는 Function 프로시저와는 달리 Sub 프로시저는 식에 사용될 수 없습니다.

    Sub 프로시저를 호출하려면 문에 프로시저 이름과 괄호로 묶은 인수 목록을 차례로 사용합니다. 인수를 사용하지 않을 경우에만 괄호를 생략할 수 있습니다. 그러나 항상 괄호를 포함하면 코드를 보다 쉽게 읽을 수 있습니다.

    필요에 따라 Call 문을 사용하여 Sub 프로시저를 호출할 수도 있습니다. 이렇게 하면 코드를 쉽게 읽을 수 있습니다.

문제 해결

실행 순서. Visual Basic에서는 내부 효율성을 향상시키기 위해 산술식을 다시 정렬하기도 합니다. 따라서 인수 목록에 다른 프로시저를 호출하는 식이 포함되어 있으면 프로시저를 특정 순서로 호출할 수 없습니다.

예제

다음 예제에서는 Sub 문을 사용하여 Sub 프로시저의 본문을 형성하는 이름, 매개 변수 및 코드를 정의합니다.

Sub computeArea(ByVal length As Double, ByVal width As Double)
    ' Declare local variable.
    Dim area As Double
    If length = 0 Or width = 0 Then
        ' If either argument = 0 then exit Sub immediately.
        Exit Sub
    End If
    ' Calculate area of rectangle.
    area = length * width
    ' Print area to Immediate window.
    Debug.WriteLine(area)
End Sub

참고 항목

작업

방법: 제네릭 클래스 사용

프로시저 문제 해결

방법: Partial 메서드 만들기(Visual Basic)

개념

매개 변수 배열

부분 메서드

참조

Implements 문

Function 문(Visual Basic)

매개 변수 목록

Dim 문(Visual Basic)

Call 문(Visual Basic)

Of