Please Enable JavaScript!
Mohon Aktifkan Javascript![ Enable JavaScript ]

ref, out 매개변수 한정자 차이

2016. 4. 4. 10:37programming/c#

728x90



보통 일반적인 Call By Value형식은 매개변수로 전달 후 전달되었던 인수의 값을 호출하면 원래 값 그대로 유지됩니다.


하지만 이 값을 바뀐 값으로 유지하고자 한다면 참조 전달로 해야 합니다.


이때 사용 되는 키워드가 ref와 out 매개변수 한정자 입니다.

ref 와 out 모두 공통적으로 Call By Reference 방식입니다.

메서드에 매개변수를 전달할 때 값(Call By Value)가 아닌 참조 전달입니다.

파라미터를 전달할 때, 참조로 전달하고자 한다면 ref, out 키워드를 사용합니다.


ref를 사용할 경우 메서드 내에서 변경된 값은 리턴 후에도 유효합니다.

ref를 사용하기 위해서는 메서드로 전달되기 전에 무조건 초기화가 되어 있어야 합니다.

메서드 안에서 반드시 값을 할당 할 필요는 없습니다.


out을 사용할 경우 파라미터는 메서드 내에서 그 값을 반드시 지정하여 전달하게 되어 있습니다.

그 이전의 값은 무시됩니다. 초기화할 필요는 없고 선언만 되어 있으면 됩니다.

해당 매개변수는 리턴하기전 혹은 메서드의 안에서 무조건 할당이 되어야 합니다.

선언된 매개 변수의 수정은 메서드 외부에서도 볼 수 있습니다.


ref:

  • Passes the argument by *Reference* and not by value.

  • It *Must* be initialized before passing it to the method, cannot just be declared.

  • It does *Not* have to be modified or used in the method.

 

out:

  • Passes the argument by *Reference* and not by value.

  • Does *Not* have to be initialized, only needs to be declared.

  • The method *Must* assign a value to the out argument before the return call is hit or end of scope is reached.

그럼 어떤경우에  ref를 사용하고 out을 사용할까요


ref의 경우 메서드 내부에서 변수를 수정하려 할 때 사용하고


out의 경우 메서드 내부에서 생성된 값을 반환하려 할 때 사용.



728x90