Hubeen's Home

C# 6.0 New Features

C# 6.0 새로운 기능 10가지 소개
* 예전에 써둔 글 옮기는 중입니다!


1. 엘비스 연산자

엘비스 연산자는 ? 앞에 있는 객체가 NULL인지 아닌지를 체크해서 NULL이면 NULL을 리턴하고, 그렇지 않으면 ? 다음 속성이나 메서드를 실행합니다.
만약 인덱서 혹은 배열 요소등을 접근할 경우에는 ?[] 과 같이 표현이 가능합니다.

Before Code


var PageName = "Z1젼7rl발ㅈr";
if(UserName != NULL)
{
PageName = _Name;
}

var PageName = UserName != null ? _Name : "Z1젼7rl발ㅈr";


After Code


var PageName = UserName?._Name ?? "Z1젼7rl발ㅈr";



2. 문자열 보간

이 문자열 보간 기능을 사용하기 위해서는 $ 을 전체 서식 문자열 앞에 추가해야합니다.

Before Code


int x = 1,y=2;

string str = string.Format("{0}, {1}", x, y);



After Code


int x = 1,y=2;

string str = $"{x},{y}";



3. 딕셔너리(사전) 초기화

딕셔너리를 초기화하는 스타일과 사용하는 스타일이 약간의 차이가 있습니다.
6.0 으로 올라오면서 이러한 스타일을 통일시켰는데요.
※ 이 초기화 기능은 6.0으로 올라오면서 해시테이블, 인덱서를 지원하는 모든 객체에서 사용 가능합니다.

Before Code


var InfoMe = new Dictionary<string, string>()
{
{ "PageName", "Z1젼7rl발ㅈr"},
{ "AdminCnt", "3 Persons"}
};
string PN = InfoMe["PageName"];


After Code


var InfoMe = new Dictionary<string, string>()
{
["PageName"] = "Z1젼7rl발ㅈr",
["AdminCnt"] = "3 Persons"
};
string PN = InfoMe["PageName"];


4. nameof 연산자

C# 6.0의 name of 연산자는 타입, 메서드, 속성 등의 이름을 리턴하는 것으로 하드 코딩을 하지 않게 도움을 줍니다.

하드 코딩에 의한 타이핑 오류 방지에 도움이 됩니다.


Before Code


public Point Add(Point point)

{

if(point == null)

{

throw new ArgumentNullException("point");

}

}



After Code

public Point Add(Point point)

{

if(point == null)

{

throw new ArgumentNullException(nameof(point));

}

}


5. using static 문

지금까지는 클래스명,속성명으로 사용했습니다.

하지만 C# 6.0에서는 using static 클래스명을 작성하면 클래스명 없이 메서드를 직접 사용할 수 있게 됬습니다.


Before Code


namespace Z1젼7rl발ㅈr

{

    class Program

    {

        static void Main(string[] args)

        {


            Console.WriteLine("Z1젼7rl발ㅈr");


        }

    }

}



After Code


using static System.Console;


namespace Z1젼7rl발ㅈr

{

    class Program

    {

        static void Main(string[] args)

        {


            WriteLine("Z1젼7rl발ㅈr");


        }

    }

}



6. 예외 필터

이 기능은 Visual Basic, F#에서는 지원되고 있었지만 C#에는 지금까지 지원되지 않았던 기능입니다.

예외 필터란 catch 블럭이 예외를 catch하기 전에 필터링 할 수 있도록 허용하는 기능입니다.

C# 6.0 문법에서는 catch 문 뒤에 추가적인 when 조건문을 사용하면 됩니다.


Before Code


try
{
...
}
catch (ConfigurationException e)
{
}
finally
{
}


After Code


try
{
...
}
catch (ConfigurationException e) when (e.IsServere)
{
}
finally
{
}


7. catch 및 finally 블럭에 await

5.0 에서 await 기능을 도입했었지만 catch 및 finally 블럭에서 await 사용은 지원하지 않았다.
하지만 6.0으로 올라오면서 이를 기본적으로 지원하게 되었다.
비동기 짱짱 await


Code


try
{
service = new ServiceClient();
await service.Save(data);
}
catch (Exception ex)
{
await LoggingService.Log(ex);
}
finally
{
await service.Close();
}


8. 자동 프로퍼티 초기화

이전에는 프로퍼티를 자동 생성하는 방법에서 초기 값을 설정하는 방법은 생성자를 만들어서 이를 해당 값에 할당하였습니다.

하지만 6.0에서는 곧바로 자동 속성을 만들면서 = "값" 을 통해 생성자 구현 없이 값을 할당할 수 있게 되었습니다.


Before Code


public class Z1젼7rl발ㅈr
{
    public autos()
    {
        PageName = "Z1젼7rl발ㅈr";
    }

    public string PageName { get; set; }

}


After Code


public class autos
{

    public string PostName { get; } = "Z1젼7rl발ㅈr";

}


9. 읽기 전용 자동 프로퍼티

이전에는 자동 프로퍼티는 항상 get과 set을 함께 사용하였습니다.

하지만 6.0에서는 읽기 전용의 자동 프로퍼티를 쓸 수 있게 되었습니다..

즉 get만을 사용할 수 있게 됬습니다..

※ 값을 할당하지 않으면 컴파일러는 자동으로 default 값을 할당합니다. 


Before Code


public class Z1젼7rl발ㅈr
{

    public string PageName { get; set; }

}


After Code


After Code :

public class Z1젼7rl발ㅈr
{

    public string PageName { get; }

}


10. 식으로 구성된 메서드

Statement Block을 사용하는 대신 간단한 함수식을 사용할 수 있는데 이를 Expression-bodied member 표현이라고 합니다.

이는 기존의 람다식과 유사한 것으로 속성이나 메서드 body를 간략한 람다식처럼 표현합니다.


Code


public Point Move(int x, int y) => new Point(X+x, Y+y);


이상 C# 6.0 새로운 기능 소개 글이였습니다.

Reference


'0x0a Programming > 0x0d C#' 카테고리의 다른 글

C# 7.0 New Features  (1) 2016.07.20
C# 6.0 New Features  (0) 2016.07.19

댓글 0