namespace CSharp
{
internal class Program
{
// 클래스 안에 있어야 한다.
// Method Function Procedure
// 메소드 함수
//한정자 반환형식 이름(매개변수)
//{
//}
// 덧셈 함수
static int Add(int a, int b)
{
int result = a + b;
return result;
}
// 복사와 참조
//
//static void AddOne(int number)// 복사
//{
// number = number + 1;
//}
static void AddOne(ref int number)// 복사
{
number = number + 1;
}
static void HelloWorld()
{
Console.WriteLine("HelloWorld");
}
static void Main(string[] args)
{
HelloWorld();
//int a = 4;
//int b = 5;
//int result = Program.Add(a, b);
int a = 0;
Program.AddOne(ref a);
Console.WriteLine(a);
}
}
}
아래는 제공해주신 코드와 설명 내용을 바탕으로 C#에서 함수(메소드)의 기본 사용법, 값 복사(Call by Value)와 참조 전달(Call by Reference)의 개념, 그리고 디폴트 매개변수에 대해 자세하게 정리한 내용입니다.
static 반환형식 메서드이름(매개변수목록)
{
// 함수 내부의 로직
}
public, private, internal 등 접근 제한자를 지정 void 사용) 예를 들어, 두 수의 덧셈을 수행하는 함수는 아래와 같이 정의할 수 있습니다.
static int Add(int a, int b)
{
int result = a + b;
return result;
}
그리고 Main 함수에서 호출 시 다음과 같이 사용할 수 있습니다.
static void Main(string[] args)
{
int result = Program.Add(1, 2);
Console.WriteLine(result); // 3 출력
}
또한, Console.WriteLine() 또한 메서드로서 콘솔에 출력을 담당하는 함수입니다.
C#에서 함수에 인수를 전달하는 방식에는 크게 두 가지가 있습니다.
개념:
인수를 전달할 때 실제 변수의 값을 복사하여 함수의 매개변수에 전달합니다.
함수 내부에서 매개변수 값을 변경해도 원래 변수에는 영향을 주지 않습니다.
예제 코드:
class Program
{
static void AddOne(int number)
{
number = number + 1;
}
static void Main(string[] args)
{
int a = 0;
Program.AddOne(a);
Console.WriteLine(a); // 0 출력: a는 변경되지 않음
}
}
a의 값이 0인 상태로 함수에 전달되고, 함수 내부에서 증가된 값은 number라는 별도의 메모리 공간에 저장되므로 원본 a에는 영향을 주지 않습니다.개념:
ref 키워드를 사용하여 매개변수를 전달하면, 인수의 메모리 자체를 참조하게 됩니다.
따라서 함수 내부에서 매개변수의 값이 변경되면 원래 변수도 같이 변경됩니다.
예제 코드:
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); // 1 출력: a의 값이 함수 내부에서 직접 변경됨
}
}
ref 키워드를 사용함으로써, 함수에 전달된 number는 원래 변수 a와 같은 메모리를 참조하게 되어 함수 내 연산 결과가 그대로 반영됩니다.또한, 함수에서 값을 반환하는 방식(return)을 이용해 원본을 변경하지 않고 새로운 값을 만들어 내는 방법도 있으며, 상황에 따라 효율성과 디자인 측면에서 적절한 방식을 선택하게 됩니다.
예를 들어:
class Program
{
static int AddOne2(int number)
{
return number + 1;
}
static void Main(string[] args)
{
int a = 0;
a = Program.AddOne2(a); // 원본 a를 직접 변경하지 않고, 리턴 값을 이용해 할당
Console.WriteLine(a); // 1 출력
}
}
C#에서는 함수 정의 시 매개변수에 기본값을 설정할 수 있습니다.
이렇게 하면 함수를 호출할 때 해당 인수를 생략하면 기본값이 사용됩니다.
class Program
{
static int Add(int a, int b, int c = 0, float d = 1.0f, double e = 3.0)
{
return a + b + c;
}
static void Main(string[] args)
{
// c, d, e 매개변수 중 원하는 것만 인수를 지정할 수 있음.
// 예를 들어, d만 값을 지정하고 싶다면 다음과 같이 호출할 수 있습니다.
Program.Add(1, 2, d: 2.0f);
}
}
c, d, e는 각각 기본값(디폴트 값)이 설정되어 있어서, 인수를 생략해도 해당 기본값이 사용됩니다.