Unity3d C# toolba 사용해보기

C# Method 반환 형식을 알아봅니다.

C#의 반환형식에 대해서 알아 보고자 합니다.  

Method와 Class는 객체지향에서 거의 전부를 이야기 하고 있는 부분이기때문에정말 중요하네요 그래서 그런지 내용도 많습니다.

한꺼번에 정리가 잘 안되니 중요한 것 위주로 해서 분할하려고 합니다.

지난번에 정리한 내용중에 메소드의 선언 형식에 대해서 정리를 해 봤는데요..

public static int add (int a, int b)
{               [1]
 ....
}

위와 같은 형식으로 선언한 부분에서..  [1]번에 해당 하는 형식이 Method의 반환 형식이라는 것을 알았습니다.

그럼 대체 결과를 어떤 식으로 해서 반환하게 되는지 알아 보려고 합니다.

델파이와 비교를 많이 하게 되는데요 어쩔 수 없습니다.. 현역 델파이 개발자라서;;

델파이함수에서결과는
Result := [결과값];  이런 식으로 반환을 하거든요..

function add( a,b :integer):integer;
begin
      result := a + b;
end;

또한.. 여러 결과값을 보내는 방법은 저는 이런 식으로 하고 있습니다.

function add( a,b :integer; var c,d: integer):integer;
begin
      c := a *b;
      d := (a+b)*b;
      result := a + b;
end;

이렇게 처리를 하면..
실 사용 부분에서는..

(중략)...

x := add(1,5,i,j);

x에는 1 과 5 의 결과값이 result부분이 들어오게되고..
i,j에는 함수에 c와 d에 해당하는 결과가 들어오게되죠..

C#에서는 하다 보니 기존에 이런 방법들을 어떻게 처리를 하는지..궁금증이  많이 생기네요.. 일단.. 반환하는 결과 값이 위와 같은 경우라면 하나가 되겠지요.. 근데 위와 같이  결과를 2개 이상 받아야 하는 경우도 분명히 있을 겁니다.

그럴 경우에는 어떻게 하는지 궁금합니다.

Method를 이야기하면서 참조에 의한 전달 방식(Call by reference)에 대한 설명이 나오네요..  학교 다닐땐 이게 무슨 이야긴가~ 어안이 벙벙했는데...  ^^;

메소드의 매개변수 입력하는 값들을 값을 변화 시킨다 정도로만 이해하고 넘어 가기로하죠..

제가 위에서 제시한 함수 같은 경우 결과용 변수를 만들어서 반영하는 것이라 조금 거리감이 있긴 한데요..

C#에서는  ref라는 키워드를 매개변수앞에 선언해줘서 처리하는 방법이 있습니다.

public static int add ( int a, int b,ref int c, ref int d)
{
  result = a + b;
  c =  a * b;
  d = (a+b)*b;
}

이런 식으로 처리하면.. c,d에 결과값을 받아올 수 있습니다.


....
add(a,b,ref c,ref d);
Console.WritLine("c,d  값은?:{0} , {1}", c,d);
....

ref 키워드를 반환형이 아닌 void형식의 method에도 사용할 수 있다고 합니다.

이럴 경우 결과를 호출하는 형식의 메소드가 아니더라도.. 매개변수의 값이 변경이 됩니다.. 혼란스러워서 저는 못 쓸 것 같네요.. 소스가 간결해지기는 하지만.. 실수할 수 있을 것 같아요

이런거죠..

public static void change( ref int a, ref int b)
{
  int tmp = b;
  b = a;
  a = tmp;
}

이런 void형식의 메소드 라면 결과값을 보내 주지 않는데..  

ref 키워드를 이용하면.. 결과를 받지 않고도 변수의 값을 변경할 수 있습니다.


C# Method return Type




리턴값이 없어도 이렇게 매개변수를 바꿔버리네요.. 주의해서 사용해야겠습니다.

다른 반환형식의 방법은 out이라는것이 있습니다.
이것은.. 설명에 따르면.. ref키워드에 없는 안전장치가 있다고 합니다. out키워드를 사용해서 값을 넘길때 매개변수에 결과를 저장되지 않으면 에러가 난다고 하네요..

그냥 단지.. ref  -> out으로 바꿔만 주시면 됩니다.

public static int add ( int a, int b, out int c, out int d)
{
  result = a + b;
  c =  a * b;
  d = (a+b)*b;
}

한번 예제를 보면서 테스트 해봤는데요..


C# Method return Type2



제가 원하는 결과 값이 잘 나왔습니다.

다음 시간에 이어서 진행해야 겠습니다.  메소드 오버로딩(Method Overloading)이 기다리고 있습니다.ㅜㅜ




댓글