해결된 질문
작성
·
363
11
하지만 어떤 경우에 ref와 out을 써야하는지 정확히 모르겠습니다
out이 그 변수에 값이 할당되지 않은 경우에 사용하는것이 맞습니까?
그러면 강의에서 쓰신 ref도 out으로 대체가 되는겁니까?
강의 잘 보고 있습니다 화이팅입니다!
답변 3
25
안녕하세요,
기능적으로나 성능적으로나 ref vs out은 별다른 차이가 없고,
내부적으로 주소를 참조해서 데이터를 다루게 됩니다. (C++의 포인터와 유사)
다만 이루고자 하는 목적이 다르기 때문에 문법도 2개로 구분이 되는데,
ref의 경우 [함수 외부] <-> [함수 내부] 양방향으로 통신하기 위해서 데이터 참조를 주고 받는 개념이고
out의 경우 [함수 내부]에서 작업한 최종 결과물을 [함수 외부] 쪽으로 넘겨주는 일방적 통행이라 보시면 됩니다.
결과적으로 ref를 사용할 때는 [함수 외부]에서 데이터를 설정하지 않으면 에러가 나고,
out의 경우 [함수 내부]에서 데이터를 설정하지 않으면 에러가 납니다.
추가로 ref를 사용할 때는 [함수 내부]에서 [함수 외부]로부터 전달받은 값을 읽거나 덮어쓰는 행동이 다 가능하지만,
out을 사용할 때는 <결과물을 넘겨주는 용도>로 사용하기 때문에
[함수 외부]에서 무슨 값을 넘겨줬는지 읽는 용도로는 사용이 안됩니다.
TextRPG 전투에서는 실제 Player 정보를 이리저리 ref로 넘겨주면서 서로 원본 Player의 정보를 조작하고 있는데,
이 원본 값은 [함수 내부]에서 정의된 것이 아니기 때문에 out으로 대체할 수는 없습니다.
요약하자면 [함수 내부/외부 사이에 데이터를 빠르게 넘겨주기 위해 사용할 것이냐] 아니면
[그냥 최종 데이터를 함수 외부로 넘겨주기 위한 용도로 사용할 것이냐]를 먼저 구분하면,
자연스럽게 ref/out 중 하나를 고를 수 있게 됩니다.
0
0
질문이 있습니다!
Main에서 Player player 선언해서 player라는 객체를 만들고 choice와 함께 CreatePlyer로 인자를 choice와 player를 넘겨주었는데
왜 ref player를 하면 할당되지 않은 변수를 넘겨 줬다고 오류가 나고 (CreatePlayer(choice, ref Player player 했을때) out Player player를 하면 오류가 안나던데
1. 선생님 말로는 ref, out 의 기능적 차이는 없다고하셨는데 왜 이런 오류가 나는것인가요? 똑같이 진퉁을 넘기는것 아닌가요?
2. 함수내부라는말이 Main 함수를 말하는것인가요?
그래서 위에 댓글설명대로 out이 함수 내부에서 외부로 사용할때만 오류가 안나는것인가요?