By Reference / By Value
프로시저 작성 시 인수를 기입할 때 다음과 같이 입력하는 것이 일반적. 하지만 사실 인수의 이름 앞에는 'ByRef'가 생략되어있습니다.
한줄로 나타내면
ByVal (인수의 값 건네기) : 인수 값의 복사를 건넵니다.
ByRef (인수의 참조 건네기) : 인수 값을 직접 건네는 것이 아니라, 인수가 저장된 메모리 어드레스를 나타내는 지표(포인터)를 건넵니다.
전달 메커니즘의 선택
두 전달 메커니즘 중 하나를 선택할 때 가장 중요한 기준은 호출 변수의 변경 가능 여부입니다.
ByRef로 인수를 전달하면 프로시저가 해당 인수를 통해 호출 코드로 값을 반환할 수 있다는 장점이 있고,
ByVal로 인수를 전달하면 프로시저가 변경하지 못하도록 변수를 보호할 수 있습니다.
전달 메커니즘도 코드 성능에 영향을 미칠 수 있으나 큰 차이는 없습니다. 여기에서 한 가지 예외는 ByVal로 전달되는 값 형식입니다.
이 경우 Visual Basic에서 인수의 전체 데이터 내용을 복사하므로 구조체처럼 큰 값 형식에 대해서는 ByRef로 전달하는 것이 더 효율적입니다.
참조 형식의 경우에는 데이터에 4바이트 포인터만 복사됩니다.
따라서 성능에 영향을 주지 않고 String 또는 Object 형식의 인수를 ByVal로 전달할 수 있습니다.


출처 : msdn, http://liesm.tistory.com/424