C#

[C#]ref

이경로 2023. 7. 4. 19:48

간단한 코드를 보자.

매개변수에 10을 더해주는 add함수가 있고, main에서 1이라는 값을 가지는 a를 함수에 인자로 넣었다.

하지만 출력값은 11이 아니라 a의 초기값인 1이 출력되었다. 

add함수의 매개변수는 int a의 값을 단순히 복사한 값이고 a의 주소를 참조한 것이 아니기 때문이다.

ref를 사용하면 이런 문제를 해결할 수 있다.

 

ref는 값을 복사하는 것이 아니라 실제 변수의 메모리 주소를 참조하는 것이기 때문에 변수의 값이 직접적으로 바뀌게 된다.

 

하지만 이런 방식에는 단점이 있는데, 실제 값을 바꾸지 않고 함수로 간단한 확인 작업만을 수행하고 싶을 때도 실제 값이 바뀌게 되는 문제가 있다. 이럴 때는 실제 값을 바꾸지 않고 리턴값을 이용하면 간단하게 해결이 가능하다.

실제로 위와 같은 방식이 사용이 가능하다면 되도록 ref보다는 리턴값을 사용하는 방식을 권장한다. 앞에서 말했듯이 원본 값을 바꾸지 않고 사용이 가능하고, 필요에 따라 다른 변수에 저장해둘 수도 있기 때문이다.