A. 메소드 오버로딩
오버로딩(Overloading) : '과적하다'라는 뜻을 가진다.
메소드 오버로딩은 하나의 메소드이름에 여러개의 구현을 올리는것을 뜻한다.
ex)
Console.WriteLine(bool value)
Console.WriteLine(int value)
이와같이 WriteLine() 메소드는 총 19개버전을 오버로딩하고있다.
B. 가변길이 매개변수
C#은 같은형식의 매개변수의 "수"가 다른경우를 위해 "가변 길이 매개 변수"라는 기능을 제공한다.
ex)
static int Sum(params int[] args)
{
int sum=0;
for(int i=0;i<args.Length;i++){
if(i>0)
Console.Write(", ");
Console.Write(args[i]);
sum+=args[i];
}
Console.WriteLine();
return sum;
}
static void main(string[] args)
{
int sum=Sum(3,4,5,6,7,8,9,10);
Console.WriteLine($"Sum : {sum}");
}
C. 명명된 매개 변수
메소드 호출시 매개변수에 순서대로 값을 할당하는것이 아닌 매개변수의 이름에 근거해 값을 할당하는 기능.
static void PrintProfile(string name, string phone)
{
Console.WriteLine("Name :{0}, Phone{1}",name,phone);
}
static void Main(string[] args)
{
PrintProfile(name : "GT", phone : "010-123-1234");
}
* 이 기능은 매개변수가 너무 많아 어느 매개변수에 어느 데이터를 할당하고있는지 분간이 어려운경우에 도움된다.
D. 선택적 매개 변수
메소드 선언시 매개변수에 기본값을 넣어주고, 메소드 호출시 데이터 할당을 생략할수있는 기능.
void MyMethod(int a, int b = 0)
{
Console,.WriteLine("{0},{1}",a,b);
}
// 사용시 MyMethod(3); -> a=3, b=0
// MyMethod(3,4); -> a=3, b=4
* 주의사항으로는 선택적 매개변수는 항상 필수매개변수 뒤에 와야한다.
※ 오버로딩과 선택적 매개변수는 동시에 사용하면 안된다.
프로그래머가 오버로딩을할지 선택적매개변수를 사용할지 정책적으로 정하는것이 필요하다.
논리는 동일하고 매개변수가 다른경우는 선택적 매개변수를 사용하고,
매개변수에 따라 논리도 함께 달라지는경우는 오버로딩을 사용하는식으로..
E. 로컬함수
메소드 안에서 선언되고, 선언된 메소드안에서만 사용되는 함수. (클래스멤버가 아니므로 메소드가 아닌 함수라고 부른다.)
특징으로는 로컬함수는 자신을 선언한 메소드의 지역변수를 읽고쓸수있다.
- 사용하는 케이스 : 메소드 밖에서는 다시 쓸일없는 반복적인 작업을 한이름아래 묶어놓는데 사용.
람다식에서 사용
static string ToLowerString(string input)
{
var arr = input.ToCharArray();
for (int i = 0; i < arr.Length; i++)
{
arr[i] = ToLowerChar(i);
}
char ToLowerChar(int i)
{
if (arr[i] < 65 || arr[i] > 90)//A~Z의 아스키 값 : 65~90
return arr[i];
else //a~z의 아스키 값 : 97~122
return (char)(arr[i] + 32);
}
return new string(arr);
}
static void Main(string[] args)
{
Console.WriteLine(ToLowerString("Hello")); //hello 출력
}
'C# 공부 > C# 기본 문법' 카테고리의 다른 글
클래스 - 2 (this(), 접근한정자, 상속, base키워드, is/as, 기반/파생 클래스간 형변환) (0) | 2020.07.24 |
---|---|
클래스 - 1 (Static, 얕은/깊은 복사) (0) | 2020.07.23 |
메소드(Method) - 1 (참조에의한 매개변수 전달, 결과를 참조로 반환, 출력전용 매개변수) (0) | 2020.07.23 |
코드의 흐름 제어 (do while, for each, 점프문) (0) | 2020.07.22 |
Null 연산자 (Nullable 형식, Null 조건부 연산자) (0) | 2020.07.22 |