• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

chat님 질문의 이은 out 추가 질문

21.02.06 22:33 작성 조회수 158

0

chat님께서 남겨주신 질문의 대한 답변으로 말씀주신 링크로 들어가 자세히 보았습니다.

답변 중 아래에 내용에서

[추가로 ref를 사용할 때는 [함수 내부]에서 [함수 외부]로부터 전달받은 값을 읽거나 덮어쓰는 행동이 다 가능하지만,}

위 내용은 이해가 갑니다. 다만 그 후 내용(아래 볼드체)에서 out은 함수 외부에서 무슨 값을 넘겨줬는지 읽는 용도로는 사용이 안된다고 하셨는데, 

------------------------------

out을 사용할 때는 <결과물을 넘겨주는 용도>로 사용하기 때문에
[함수 외부]에서 무슨 값을 넘겨줬는지 읽는 용도로는 사용이  안됩니다.

아래의 코드에서는 a, b result1, result2의 값을 모두 읽을 수 있지 않나요??

        static void Add(int sum1, int sum2, out int result1, out int result2)

        {

            result1 = sum1 + sum2;

            result2 = sum1 - sum2;

        }

        static void Main(string[] args)

        {

            int a = 1;

            int b = 2;

            int result1;

            int result2;

            Add(a, b, out result1, out result2);

            Console.WriteLine(result1);

            Console.WriteLine(result2);

        }

정확히 어떤 부분에서 읽은 용도로 사용이 안되는지도 궁금하고 더불어 Add함수의 경우 반환형식을 int로 하여 out을 사용하지 않는 것과 반환형식을 void로 사용 후 out 을 통해 사용하는게 어느 부분에서 다르게 사용해야 하는 이유인지도 궁금합니다.

제 예상은 결과값을 두개 이상 넘겨줘야할 경우에 out을 사용하는 것 같지만 out을 사용하지 않고도 결과값을 두개 이상 넘겨줄수는 없는건가요??

갑작스레 배운 내용을 토대로 따져보니 궁금증이 생겨 질문드립니다 !

답변 2

·

답변을 작성해보세요.

0

현준호님의 프로필

현준호

질문자

2021.02.07

아아! 이제 이해가 갔습니다!!

상세하고 정확한 답변 감사드립니다!

0

정확히 어떤 부분에서 읽은 용도로 사용이 안되는지도 궁금하고 더불어 Add함수의 경우 반환형식을 int로 하여 out을 사용하지 않는 것과 반환형식을 void로 사용 후 out 을 통해 사용하는게 어느 부분에서 다르게 사용해야 하는 이유인지도 궁금합니다.

-> 문법적으로 못 읽는다는 의미는 아니고,
단지 out 변수는 외부에서 세팅을 해주지 않아도 함수에 넘겨줄 수 있습니다.
즉 애당초 함수 내부에서 외부로 값을 반환하는 용도로 사용하는 것이지
out 값에 어떤 값을 전달해줄 것이라고 기대하진 않습니다.

대부분의 경우 반환형식을 int로 하는 쪽이 훨씬 좋습니다. (성능적 이슈보다는, 함수 사용 인터페이스 차원에서)

제 예상은 결과값을 두개 이상 넘겨줘야할 경우에 out을 사용하는 것 같지만 out을 사용하지 않고도 결과값을 두개 이상 넘겨줄수는 없는건가요??

-> out을 사용하지 않는다면, Tuple을 만들어준다거나 struct을 만들어준다거나 해서 반환할 수 있습니다.
물론 반환할 데이터가 여러개라면 out을 사용해도 괜찮습니다.
bool으로 성공 여부를 반환하고, 실제 데이터는 out으로 반환하는 경우도 있고요 (Dictionary TryGetValue 등)