관리 메뉴

심재운 블로그

Ref,Out 에 대한 참조 설명 본문

닷넷관련/CSharp

Ref,Out 에 대한 참조 설명

재우니 2009. 2. 12. 02:22


reference 즉 참조라는 뜻이죠.

이 참조를 메소드에 있는 매개변수에 적용할 생각인데요.
value type(값형) 인자는 변수의 값만 넘겨주는것으로 끝입니다.

아무리 메소드를 설정하여 내부에서 변수로 값을 바꿀려고 해도 바꿀수가 없습니다. 그래서 인자값을 넘기는 방식을 값만 가져와서 사용한다고 하여 value type 인자라고 합니다. 


그러나 reference type 인자도 있는데요.

이것은 반대로 값을 넘기는 것이 아니라 변수의 reference 를 넘겨주는 것입니다. 값을 복사해 두고 사용하는 것이 아니라 직접 원래 변수가 가르키는 값을 사용한다는 거죠. 따라서 메소드 내에 변수를 이용하여 값을 바꾸게 되면 값이 변경된다는 것이죠. ^^;


말만 길게 설명을 했네요. 소스 들어가면 알겁니다. ^^;




소스가 좀...허접하죠? ^^; 쉽게 설명할려고 많이 노력하고 있습니다.

제가 노란색으로 동그라미 3개를 그렸죠. 마음이 삐뚤해서 제대로 동그라미가 그려지지 않네요. ^^; 11번째줄과 12번째줄에 초기값을 설정했고요. 그리고 CallByRef 메소드에 인자값을 넘겼죠. 그러나~~~ CallByRef 메소드의 인자 앞에 ref 키워드를 넣었죠. 그러면 reference type 으로 인식을 하고 아래 6번,7번째줄에 기술한 변수의 값으로 변경이 됩니다.

그래서 결과값이 위와 같습니다. ^^; ref 키워드에 대해 다시 정리를 하면 해당 매개변수에 초기값을 설정한다는 사실, 그리고 해당 매개변수값이 초기값이 전달된다는 사실을 참고하세요. 초기값을 설정하기 않을 경우, 에러가 발생됩니다.


================


■ out 란 무엇일까요?



ref형을 설명드렸으니까, out 형과 ref 형의 차이점은 ref 형은 초기값을 지정해주어야 에러가 발생되지 않으며, out 형은 초기값을 꼭 할 필요는 없죠. 않해도 에러 안납니다. ref 형은 인자값을 넘겨주고 받죠. 그러나 out 형은 넘겨주는 값도 없고, 받기만 하죠. 제가 보기엔 초기값을 주느냐, 안주느냐 차이점인것 같습니다. ^^;



ref 은 give and take가 잘 되어 있어서 이쁜데요.
out 은 take 만 있어서 거지 근성이 있네요. ^^;

소스를 보겠습니다.




'



posted by 심재운 (shimpark@gmail.com)


Tag
, , , ,
0 Comments
댓글쓰기 폼