인수를 값으로 전달할 때와 참조로 전달할 때의 차이점(Visual Basic)

프로시저에 하나 이상의 인수를 전달하는 경우 각 인수는 호출 코드의 기본 프로그래밍 요소에 해당합니다. 이 기본 요소의 값 또는 이에 대한 참조를 전달할 수 있습니다. 이를 전달 메커니즘이라고 합니다.

값으로 전달

프로시저 정의에서 해당 매개 변수에 대한 ByVal 키워드를 지정하여 by value 인수를 전달합니다. 이 전달 메커니즘을 사용하면 Visual Basic은 기본 프로그래밍 요소의 값을 프로시저의 지역 변수에 복사합니다. 프로시저 코드는 호출 코드의 기본 요소에 액세스할 수 없습니다.

참조로 전달

프로시저 정의에서 해당 매개 변수에 대한 ByRef 키워드를 지정하여 by reference 인수를 전달합니다. 이 전달 메커니즘을 사용하는 경우 Visual Basic은 호출 코드의 기본 프로그래밍 요소에 대한 직접 참조를 프로시저에 제공합니다.

전달 메커니즘 및 요소 형식

전달 메커니즘의 선택은 기본 요소 형식의 분류와 동일하지 않습니다. 값 또는 참조로 전달하는 것은 Visual Basic이 프로시저 코드에 제공하는 것을 나타냅니다. 값 형식 또는 참조 형식은 프로그래밍 요소가 메모리에 저장되는 방법을 나타냅니다.

그러나 전달 메커니즘과 요소 형식은 상호 관련되어 있습니다. 참조 형식의 값은 메모리의 다른 위치에 있는 데이터에 대한 포인터입니다. 즉, 값으로 참조 형식을 전달하면 기본 요소 자체에 액세스할 수 없더라도 프로시저 코드에 기본 요소의 데이터에 대한 포인터가 있습니다. 예를 들어 요소가 배열 변수인 경우 프로시저 코드는 변수 자체에 액세스할 수 없지만 배열 멤버에는 액세스할 수 있습니다.

수정 기능

수정할 수 없는 요소를 인수로 전달하면 프로시저는 ByVal 또는 ByRef 전달 여부에 관계없이 호출 코드에서 수정할 수 없습니다.

수정 가능한 요소의 경우 다음 표에는 요소 형식과 전달 메커니즘 간의 상호 작용이 요약되어 있습니다.

요소 타입 전달된 ByVal 전달된 ByRef
값 형식(값만 포함) 프로시저는 변수 또는 해당 멤버를 변경할 수 없습니다. 프로시저는 변수와 해당 멤버를 변경할 수 있습니다.
참조 형식(클래스 또는 구조체 인스턴스에 대한 포인터 포함) 프로시저는 변수를 변경할 수 없지만 가리키는 인스턴스의 멤버를 변경할 수 있습니다. 프로시저는 가리키는 인스턴스의 변수와 멤버를 변경할 수 있습니다.

참고 항목