C#/코드의 흐름제어
[C#]함수(Method), ref, out
과아아앙
2021. 4. 7. 10:52
Method
코드를 기능별로 묶어서 사용한다.
ex) WriteLine() 또한 하나의 메서드이다.
함수 형태
/*
한정자 반환형식 이름(매개변수목록)
{
}
*/
static HelloWorld()
{
}
예제(더하기 함수)
using System;
namespace CSharp
{
class Program
{
// 덧셈 함수
static int Add(int a, int b)
{
int result = a + b;
return result;
}
static void Main(string[] args)
{
// 4, 5 => 9
int result = Program.Add(4, 5);
Console.WriteLine(result);
}
}
}
+오늘 알게된 팁.
vs에서 cw - tab - tab 을하면 출력문이 완성된다.
ref 와 out
ref와 out은 C#에서 인자를 전달할 때 사용하는 예약어로 메서드간 참조 형식으로 값을 사용할 수 있게 해준다.
둘은 비슷하지만 분명한 차이점이 있습니다.
단순히 말하면 out이 ref보다 좀 더 특정한 상황에서 사용하는 용도입니다.
using System;
namespace CSharp
{
class Program
{
// 덧셈 함수
static void AddOne(ref int number)
{
number = number + 1;
}
static void Main(string[] args)
{
//복사(짭퉁) 참조(진퉁)
int a = 0;
Program.AddOne(ref a);
Console.WriteLine(a);
}
}
}
using System;
namespace CSharp
{
class Program
{
// 덧셈 함수
static void AddOne(ref int number)
{
number = number + 1;
}
static void AddOne2(int number)
{
return number + 1;
}
static void Main(string[] args)
{
//복사(짭퉁) 참조(진퉁)
int a = 0;
Program.AddOne(ref a);
Console.WriteLine(a);
Program.AddOne2(a);
Console.WriteLine(a);
}
}
}
ref는 반드시 변수를 초기화해야 하고, 메서드 내에서 변형이 가능하다.
인자로 넘긴 a를 AddOne 메서드에서 number인자로 받아 사용할 수 있다.
참조 형식으로 값을 지정했기 때문에 number가 변하면 a도 변하게 된다.
using System;
namespace CSharp
{
class Program
{
static void Divide(int a, int b, out int result1, out int result2)
{
result1 = a / b;
result2 = a % b;
}
static void Main(string[] args)
{
int num1 = 10;
int num2 = 3;
int result1;
int result2;
Divide(10, 3, out result1, out result2);
Console.WriteLine(result1);
Console.WriteLine(result2);
}
}
}
반면에 out은 따로 초기화가 필요 없는 대신, 메서드 내에서 리턴 전에 반드시 값을 지정해 주어야 한다.
인자를 받는 메서드에서 사용/변형도 불가능하다.
아직은 다소 헷갈리는 구분이지만 후에 더 학습하다보면 이해가 될 것 같다.