다음을 통해 공유


Function 문(Visual Basic)

업데이트: 2007년 11월

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

참고:

Visual Basic 2008에는 함수 식을 한 줄에 정의할 수 있는 람다 식이 도입되었습니다. 자세한 내용은 함수 식람다 식을 참조하십시오.

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

구성 요소

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

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

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

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

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

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

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

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

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

  • returntype
    Option Strict가 On이면 필수적 요소입니다. 이 프로시저에서 반환되는 값의 데이터 형식입니다.

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

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

    implementedprocedure [ , implementedprocedure ... ]

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

    interface.definedname

    구성 요소

    설명

    interface

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

    definedname

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

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

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

    eventspecifier [ , eventspecifier ... ]

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

    eventvariable.event

    구성 요소

    설명

    eventvariable

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

    event

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

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

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

설명

모든 실행 코드는 프로시저 내에 있어야 합니다. 각 프로시저는 클래스, 구조체 또는 모듈 내에 선언되며 이를 포함하는 클래스, 구조체 또는 모듈이라고 합니다.

호출 코드에 값을 반환할 때 Function 프로시저를 사용하고 값을 반환할 필요가 없을 때 Sub 프로시저를 사용합니다.

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

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

함수에서 반환된 값을 사용하려는 경우 식의 오른쪽에서 Function 프로시저를 호출할 수 있습니다. Function 프로시저는 Sqrt, Cos 또는 ChrW와 같은 라이브러리 함수를 사용하는 것과 같은 방법으로 사용합니다.

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

Call 문을 사용하여 함수를 호출할 수도 있지만 이 경우에는 반환 값이 무시됩니다.

규칙

  • **반환 형식.**Function 문은 반환하는 값의 데이터 형식을 선언할 수 있습니다. 열거형, 구조체, 클래스 또는 인터페이스의 이름 또는 모든 데이터 형식을 지정할 수 있습니다.

    returntype이 지정되지 않으면 프로시저에서 Object를 반환합니다.

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

동작

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

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

  • 반환 값. 함수에서 값을 반환하려면 함수 이름에 값을 할당하거나 Return 문에 값을 포함합니다. 다음 예제에서는 함수 이름 myFunction에 반환 값을 할당한 다음 Exit Function 문을 사용하여 해당 값을 반환합니다.

    Function myFunction(ByVal j As Integer) As Double
        myFunction = 3.87 * j
        Exit Function
    End Function
    

    name에 값을 할당하지 않고 Exit Function을 사용하는 경우 프로시저에서 returntype에 지정된 데이터 형식의 기본값을 반환합니다. returntype이 지정되지 않은 경우 프로시저에서 Object의 기본값인 Nothing을 반환합니다.

    Return 문은 동시에 반환 값을 할당하고 함수를 끝냅니다. 다음 예제에서는 이러한 방법을 보여 줍니다.

    Function myFunction(ByVal j As Integer) As Double
        Return 3.87 * j
    End Function
    

문제 해결

  • 실행 순서. Visual Basic에서는 내부 효율성을 향상시키기 위해 산술식을 다시 정렬하기도 합니다. 따라서 함수가 같은 식에서 변수 값을 변경하는 경우에는 산술식에 Function 프로시저를 사용하지 마십시오.

예제

다음 예제에서는 Function 문을 사용하여 Function 프로시저의 본문을 형성하는 이름, 매개 변수 및 코드를 선언합니다. ParamArray 한정자를 사용하면 함수에 여러 가지 인수를 사용할 수 있습니다.

Public Function calcSum(ByVal ParamArray args() As Double) As Double
    calcSum = 0
    If args.Length <= 0 Then Exit Function
    For i As Integer = 0 To UBound(args, 1)
        calcSum += args(i)
    Next i
End Function

다음 예제에서는 앞의 예제에서 선언한 함수를 호출합니다.

Dim returnedValue As Double = calcSum(4, 3, 2, 1)
' The function's local variables are assigned the following values:
' args(0) = 4, args(1) = 3, and so on.

참고 항목

작업

방법: 제네릭 클래스 사용

프로시저 문제 해결

개념

매개 변수 배열

람다 식

참조

Sub 문(Visual Basic)

매개 변수 목록

Dim 문(Visual Basic)

Call 문(Visual Basic)

Of

함수 식