Programming/C# & Unity

C# 4.0 쓸만한 기능

장형이 2020. 1. 10. 16:33

세미나하면서 알게된 기능 두개.

쓸만해보여서 기록함.

 

1. 함수 파라미터에 콜론 (선택적 인수)

(https://docs.microsoft.com/ko-kr/dotnet/csharp/programming-guide/classes-and-structs/named-and-optional-arguments)

 

선택적 인수는 항상 끝에 나열되기 때문에, 새로운 인수를 추가하는 과정이 매우 번거롭다.
그리고 선택적 인수가 여러개 있을 때, 한개의 값만 넣으려고 하면 C++은 매우 불편했다..

static void Main( string[] args )
{
	List<int> lstInteger = new List<int>();
	PrintTypeOfC( 1, null, lstInteger ); // 이렇게 중간에 선택적 인자에 값을 넣어줘야한다..
}
static public void PrintTypeOfC( int a, object b = null, object c = null)
{
	Console.WriteLine( c.GetType() );
}
// "System.Collections.Generic.List`1[System.Int32]" 출력

중간 선택적 인자의 값이 object가 아니고 정수 같은 경우 기본값을 바꾸려면, 호출 시점을 일일히 찾아서 바꾸는 불편함이 있었다.

하지만 C#에서는 선택적 인자중에 원하는 것을 골라서 집어 넣을수가 있다!

 

static void Main( string[] args )
{
	List<int> lstInteger = new List<int>();
	PrintTypeOfC( 1, c: lstInteger ); // b는 무시하고 c에 값을 바로 집어넣음!
}
static public void PrintTypeOfC( int a, object b = null, object c = null)
{
	Console.WriteLine( c.GetType() );
}
// "System.Collections.Generic.List`1[System.Int32]" 출력

괜히 기본값을 일일히 넣지 말고, 미래를 위해서 이 방법을 쓰는게 좋을 듯 하다.

 

2. Out var

static void Main( string[] args )
{
	List<int> lstInteger = null; // out으로 뽑기위해서 변수를 선언해야한다.
	GetIntList( 1, 10, out lstInteger );
	Console.WriteLine( lstInteger.Count );
}
static public void GetIntList( int from_, int to_, out List<int> lstInteger_ )
{
	lstInteger_ = new List<int>();
	for ( int i = from_; i <= to_; ++i )
	{
		lstInteger_.Add( i );
	}
}
// 10 출력됨.

위와 같이 함수에 out 파라미터를 사용하기 위해서는 변수를 따로 선언했어야 했다.
하지만 out var을 사용하면 무려 한 줄을!! 줄일 수 있다.

 

static void Main( string[] args )
{
	GetIntList( 1, 10, out var lstInteger );
	Console.WriteLine( lstInteger.Count );
}
static public void GetIntList( int from_, int to_, out List<int> lstInteger_ )
{
	lstInteger_ = new List<int>();
	for ( int i = from_; i <= to_; ++i )
	{
		lstInteger_.Add( i );
	}
}
// 10 출력됨.

아래 처럼 var가 아닌 명시적으로 type을 지정 할 수도 있다.

static void Main( string[] args )
{
	GetIntList( 1, 10, out List<int> lstInteger );
	Console.WriteLine( lstInteger.Count );
}
static public void GetIntList( int from_, int to_, out List<int> lstInteger_ )
{
	lstInteger_ = new List<int>();
	for ( int i = from_; i <= to_; ++i )
	{
		lstInteger_.Add( i );
	}
}
// 10 출력됨.

 

서버 소스코드에서 Out을 되게 자주 사용 하는데 많이 편해 질 것 같다~~ >w<