인수를 값으로 전달할 때와 참조로 전달할 때의 차이점(Visual Basic)
하나 이상의 인수를 프로시저에 전달할 때 각 인수는 호출 코드의 내부 프로그래밍 요소에 해당합니다. 이 내부 요소의 값이나 내부 요소에 대한 참조를 전달할 수 있습니다. 이를 전달 메커니즘이라고 합니다.
값으로 전달
프로시저 정의에서 해당 매개 변수에 대해 ByVal(Visual Basic) 키워드를 지정하여 인수를 값으로 전달합니다. 이 전달 메커니즘을 사용하는 경우 Visual Basic에서는 내부 프로그래밍 요소의 값을 프로시저의 지역 변수에 복사합니다. 프로시저 코드는 호출 코드의 내부 요소에 액세스할 수 없습니다.
참조로 전달
프로시저 정의에서 해당 매개 변수에 대해 ByRef(Visual Basic) 키워드를 지정하여 인수를 참조로 전달합니다. 이 전달 메커니즘을 사용하는 경우 Visual Basic에서는 호출 코드의 내부 프로그래밍 요소에 대한 직접 참조를 프로시저에 제공합니다.
전달 메커니즘 및 요소 형식
전달 메커니즘의 선택 기준과 내부 요소 형식의 분류 기준은 서로 다릅니다. 값으로 전달이나 참조로 전달은 Visual Basic에서 프로시저 코드에 제공하는 내용을 참조합니다. 값 형식이나 참조 형식은 프로그래밍 요소가 메모리에 저장되는 방법을 참조합니다.
그러나 전달 메커니즘과 요소 형식은 서로 연관되어 있습니다. 참조 형식의 값은 메모리의 다른 위치에 있는 데이터에 대한 포인터입니다. 즉, 값으로 참조 형식을 전달하는 경우 프로시저 코드는 내부 요소 자체에는 액세스할 수 없지만 내부 요소의 데이터에 대한 포인터를 포함합니다. 예를 들어, 요소가 배열 변수인 경우 프로시저 코드는 변수 자체에는 액세스할 수 없지만 배열 멤버에는 액세스할 수 있습니다.
수정 기능
비가변 요소를 인수로 전달할 경우 ByVal이든 ByRef든 관계없이 프로시저는 호출 코드에서 비가변 요소를 수정할 수 없습니다.
다음 표에서는 수정 가능한 요소에 대한 요소 형식과 전달 메커니즘 간의 상호 작용을 요약 설명합니다.
요소 형식 |
ByVal 전달인 경우 |
ByRef 전달인 경우 |
---|---|---|
값 형식(값만 포함) |
프로시저가 변수나 변수의 멤버를 변경할 수 없습니다. |
프로시저가 변수 및 변수의 멤버를 변경할 수 있습니다. |
참조 형식(클래스나 구조체의 인스턴스에 대한 포인터 포함) |
프로시저가 변수를 변경할 수는 없지만 변수가 가리키는 인스턴스의 멤버는 변경할 수 있습니다. |
프로시저가 변수 및 변수가 가리키는 인스턴스의 멤버를 변경할 수 있습니다. |
참고 항목
작업
방법: 프로시저 인수의 값 변경(Visual Basic)
방법: 값 변경에 대해 프로시저 인수 보호(Visual Basic)
방법: 인수가 값으로 전달되도록 설정(Visual Basic)
개념
수정할 수 있는 인수와 수정할 수 없는 인수 사이의 차이점(Visual Basic)