강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của epicuros189027
epicuros189027

câu hỏi đã được viết

[Loạt bài phát triển game MMORPG thực hiện bằng C# và Unity] Phần 1: Giới thiệu lập trình cơ bản C#

Trận chiến RPG

ref와 out의 차이는 대충 알것 같습니다.

Đã giải quyết

Viết

·

504

11

하지만 어떤 경우에 ref와 out을 써야하는지 정확히 모르겠습니다

out이 그 변수에 값이 할당되지 않은 경우에 사용하는것이 맞습니까?

그러면 강의에서 쓰신 ref도 out으로 대체가 되는겁니까?

강의 잘 보고 있습니다 화이팅입니다!

C#

Câu trả lời 3

25

Rookiss님의 프로필 이미지
Rookiss
Người chia sẻ kiến thức

안녕하세요,
기능적으로나 성능적으로나 ref vs out은 별다른 차이가 없고,
내부적으로 주소를 참조해서 데이터를 다루게 됩니다. (C++의 포인터와 유사)

다만 이루고자 하는 목적이 다르기 때문에 문법도 2개로 구분이 되는데,
ref의 경우 [함수 외부] <-> [함수 내부] 양방향으로 통신하기 위해서 데이터 참조를 주고 받는 개념이고
out의 경우 [함수 내부]에서 작업한 최종 결과물을 [함수 외부] 쪽으로 넘겨주는 일방적 통행이라 보시면 됩니다.
결과적으로 ref를 사용할 때는 [함수 외부]에서 데이터를 설정하지 않으면 에러가 나고,
out의 경우 [함수 내부]에서 데이터를 설정하지 않으면 에러가 납니다.
추가로 ref를 사용할 때는 [함수 내부]에서 [함수 외부]로부터 전달받은 값을 읽거나 덮어쓰는 행동이 다 가능하지만,
out을 사용할 때는 <결과물을 넘겨주는 용도>로 사용하기 때문에
[함수 외부]에서 무슨 값을 넘겨줬는지 읽는 용도로는 사용이  안됩니다.

TextRPG 전투에서는 실제 Player 정보를 이리저리 ref로 넘겨주면서 서로 원본 Player의 정보를 조작하고 있는데,
이 원본 값은 [함수 내부]에서 정의된 것이 아니기 때문에 out으로 대체할 수는 없습니다.

요약하자면 [함수 내부/외부 사이에 데이터를 빠르게 넘겨주기 위해 사용할 것이냐] 아니면
[그냥 최종 데이터를 함수 외부로 넘겨주기 위한 용도로 사용할 것이냐]를 먼저 구분하면,
자연스럽게 ref/out 중 하나를 고를 수 있게 됩니다.

0

Rookiss님의 프로필 이미지
Rookiss
Người chia sẻ kiến thức

1. 기능적 차이는 없지만, 문법적 차이는 있습니다.
2. 함수 내부라 함은 ref, out을 사용하고 있는 함수를 말하는겁니다.

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이 함수 내부에서 외부로 사용할때만 오류가 안나는것인가요?

Hình ảnh hồ sơ của epicuros189027
epicuros189027

câu hỏi đã được viết

Đặt câu hỏi