다음을 통해 공유


프로시저 오버로드(Visual Basic)

프로시저를 오버로드한다는 것은 이름이 같지만 매개 변수 목록이 다르면 여러 버전에서 프로시저를 정의하는 것을 의미합니다. 오버로드의 목적은 이름으로 구분하지 않고도 프로시저의 여러 밀접하게 관련된 버전을 정의하는 것입니다. 매개 변수 목록을 변경하여 이 작업을 수행합니다.

오버로딩 규칙

프로시저를 오버로드하면 다음 규칙이 적용됩니다.

  • 같은 이름입니다. 오버로드된 각 버전은 동일한 프로시저 이름을 사용해야 합니다.

  • 다른 서명. 오버로드된 각 버전은 다음 중 하나 이상에서 다른 모든 오버로드된 버전과 달라야 합니다.

    • 매개 변수 수

    • 매개 변수의 순서

    • 매개 변수의 데이터 형식

    • 형식 매개 변수 수(제네릭 프로시저의 경우)

    • 반환 형식(변환 연산자에만 해당)

    프로시저 이름과 함께 앞의 항목을 프로시저의 서명 이라고 합니다. 오버로드된 프로시저를 호출할 때 컴파일러는 서명을 사용하여 호출이 정의와 올바르게 일치하는지 확인합니다.

  • 서명의 일부가 아닌 항목입니다. 서명을 변경하지 않고는 프로시저를 오버로드할 수 없습니다. 특히 다음 항목 중 하나 이상만 변경하여 프로시저를 오버로드할 수 없습니다.

    • 프로시저 한정자 키워드(예: Public, Shared, 및 Static)

    • 매개 변수 또는 형식 매개 변수 이름

    • 형식 매개 변수 제약 조건(제네릭 프로시저의 경우)

    • 매개 변수 한정자 키워드(예: ByRefOptional

    • 값을 반환하는지 여부

    • 반환 값의 데이터 형식(변환 연산자 제외)

    이전 목록의 항목은 서명의 일부가 아닙니다. 오버로드된 버전을 구분하는 데 사용할 수는 없지만, 해당 서명으로 제대로 구분된 오버로드된 버전들 사이에서는 다르게 설정할 수 있습니다.

  • Late-Bound 인수입니다. 런타임 바인딩된 개체 변수를 오버로드된 버전으로 전달하려는 경우, 적절한 매개 변수를 Object로 선언해야 합니다.

여러 버전의 프로시저

고객의 잔액에 대한 거래를 처리하는 Sub 절차를 작성한다고 가정하면, 고객을 이름이나 계정 번호로 참조할 수 있기를 원할 것입니다. 이를 수용하기 위해 다음 예제와 같이 두 가지 다른 Sub 프로시저를 정의할 수 있습니다.

Sub postName(ByVal custName As String, ByVal amount As Single)
    ' Insert code to access customer record by customer name.
End Sub
Sub postAcct(ByVal custAcct As Integer, ByVal amount As Single)
    ' Insert code to access customer record by account number.
End Sub

오버로드된 버전

대안은 단일 프로시저 이름을 오버로드하는 것입니다. 오버로드 키워드를 사용하여 다음과 같이 각 매개 변수 목록에 대한 프로시저 버전을 정의할 수 있습니다.

Overloads Sub post(ByVal custName As String, ByVal amount As Single)
    ' Insert code to access customer record by customer name.
End Sub
Overloads Sub post(ByVal custAcct As Integer, ByVal amount As Single)
    ' Insert code to access customer record by account number.
End Sub

추가 오버로드

트랜잭션 금액을 Decimal 또는 Single로도 허용하고 싶다면, 이러한 변형을 허용하도록 post를 추가 오버로드할 수 있습니다. 앞의 예제에서 각 오버로드에 대해 이 작업을 수행하면 네 개의 프로시저가 있는데 Sub 모두 이름이 같지만 서명은 4개입니다.

오버로드의 장점

프로시저 오버로드의 장점은 호출의 유연성에 있습니다. 앞의 post 예제에서 선언된 프로시저를 사용하기 위해 호출 코드는 고객 ID를 a 또는 a StringInteger로 가져온 다음 두 경우 모두 동일한 프로시저를 호출할 수 있습니다. 다음 예제는 이러한 과정을 보여 줍니다.

Imports MSVB = Microsoft.VisualBasic
Dim customer As String
Dim accountNum As Integer
Dim amount As Single
customer = MSVB.Interaction.InputBox("Enter customer name or number")
amount = MSVB.Interaction.InputBox("Enter transaction amount")
Try
    accountNum = CInt(customer)
    Call post(accountNum, amount)
Catch
    Call post(customer, amount)
End Try

참고하십시오