C#은 버젼 9까지 발전하면서 다양한 변화가 있었습니다. 주목해야 할 변화를 기록하면서 사용해보고 숙달하는데 목적을 두고 정리해보겠습니다
이글을 보시는 분들은 잘 안쓰는 기능을 한번 같이 써보면서 의미를 생각해보고 자신의 코드에 같이 적용해 보도록 합시다
C#은 버젼 9까지 발전하면서 다양한 변화가 있었습니다. 주목해야 할 변화를 기록하면서 사용해보고 숙달하는데 목적을 두고 정리해보겠습니다
이글을 보시는 분들은 잘 안쓰는 기능을 한번 같이 써보면서 의미를 생각해보고 자신의 코드에 같이 적용해 보도록 합시다
C# 1은 다음의 기능이 포함되어 있습니다. C# 개발자라면 거의 대부분 사용하는 기능들이 되는데요,
C# 1부터 event와 delegate가 포함되어 있었다는 것은 흥미롭습니다. event 및 delegate가 Windows Forms의 이벤트를 언어에서 지원해주기 위해 디자인 된것이라 추측해봅니다.
C# 2에서 비로서 제네릭이 추가되었습니다. 공변성 및 반공변성
은 잘 모르시는 분들도 계실 것 같은데, 배열 형식, 대리자 형식 및 제네릭 형식 인수가 암시적으로 참조 변환할 수 있게 해줍니다. (형 변환이 아닙니다)
C# 3에서 극적인 변화가 일어나기 시작합니다 (제 기준입니다 ^^;) 코딩의 편리성을 위해 많은 개선이 이루어졌으며 특히, 자동 구현 속성
은 거의 대부분의 C# 프로그래머가 애용하는 기능입니다.
그리고 무명 형식
및 람다식
이 추가되어 쿼리 식
에서 유용하게 사용할 수 있게 됩니다.
제 추측으로는 쿼리 식 LINQ
에 대응하기 위해 이러한 기능들이 추가 된게 아닌가 생각해 봅니다.
쿼리 식
, 식 트리
, 부분 메서드
는 잘 안쓰는 기능이 될 것 같네요
C# 6 ~ 8의 정리를 잘 해주셨습니다.
SeeRoE님의 블로그 입니다.
[C#] C# 버전별 주요 변화 (tistory.com)
C# 4에 추가된 `명명된/선택적 인수’가 C# 개발자가 애용하는 기능이 아닐까 합니다. 그 이외에 다음의 기능이 추가 되었습니다.
C#4에 추가된 대부분의 기능은 COM 형식에 대한 대응으로 보입니다. 가령, Excel을 COM으로 접근하게 되면 굉장히 긴 인자를 접하게 되는데, 명명/선택 인수를 통해 필요한 것만 취할 수 있게 되었고, COM 개체를 dynamic으로 접근해서 사용상의 이점또한 얻습니다.
제네릭 공변 및 반공변은 개념은 바로 알아먹지만 실사용에 적용할 때 어려움이 있는데요, 다음의 글을 참조해봅시다.
정성태 님의 블로그 입니다. 해당 내용 및 링크도 같이 봅시다.
.NET Framework: 743. C# 언어의 공변성과 반공변성 (sysnet.pe.kr)
C# 5에서 두번째 변혁이 일어납니다(역시 제 기준입니다; ). 바로 비동기
를 언어에서 지원하게 된 것인데요, C# 5은 이 비동기 멤버
만으로도 의미있는 버젼업이라고 생각합니다.
비동기 프로그래밍은 익숙하지 않으면 낫설고 다양한 문제가 발생할 수 있는 코딩을 하게 됩니다. 언어에서 비동기의 흐름을 동기적으로 표현하게 해주는 async/await
을 사용하게 되면, 비동기 처리에 대한 깊은 이해가 없어도, 어느정도의 비동기 처리를 가능하게 해줍니다.
호출자 정보 특성의 경우, C# 프로그래머라면 항상 아쉬웠던 부분이였을 텐데요, 여전히 사용방법이 아쉽지만 특성(attribute)를 통해 사용할 수 있게 되었습니다.
C# 6은 생산성을 증대하는데 초점을 두었습니다.
자동속성 이니셜라이져, Null 전파자, 문자열
보간은 C# 프로그래머들이 애용하는 기능일 것 같고, 정적 가져오기, 예외필터, 식 본문 멤버, nameof 연산자
는 친숙하지 않을 수 있는데요,
예외필터 (try-cache, switch) 및 식 본문 멤버는 자주 쓰다보면 유용함을 느낄 수 있고,
nameof 연산자의 경우, 리팩토링으로 관련된 이름을 동시에 바꿀 수 있기 때문에 유용합니다. (버그를 줄여주는 역할)
C# 7.0 ~ 7.3에는 다양한 기능들이 추가되었습니다. 제 기억으로는 github에서 다양한 참여가 이루어지면서 개선에 반영되었던 것으로 기억합니다.
C# 8 추가 기능입니다. 다양한 추가 기능 추가되고 보완되었습니다.
C# 9 추가 기능입니다. github의 활동으로 인해 참 많은 기능이 보완되고 추가가 됩니다;
정성태님이 정리하신 글을 참고하면 도움이 많이 됩니다.
.NET Framework: 947. C# 9.0 - (1) 대상으로 형식화된 new 식(Target-typed new expressions) (sysnet.pe.kr)
.NET Framework: 948. C# 9.0 - (2) localsinit 플래그 내보내기 무시(Suppress emitting localsinit flag) (sysnet.pe.kr)
.NET Framework: 949. C# 9.0 - (3) 람다 메서드의 매개 변수 무시(Lambda discard parameters) (sysnet.pe.kr)
.NET Framework: 950. C# 9.0 - (4) 원시 크기 정수(Native ints) (sysnet.pe.kr)
.NET Framework: 951. C# 9.0 - (5) 로컬 함수에 특성 지정 가능(Attributes on local functions) (sysnet.pe.kr)
.NET Framework: 953. C# 9.0 - (6) 함수 포인터(Function pointers) (sysnet.pe.kr)
.NET Framework: 956. C# 9.0 - (7) 패턴 일치 개선 사항(Pattern matching enhancements) (sysnet.pe.kr)
.NET Framework: 958. C# 9.0 - (8) 정적 익명 함수 (static anonymous functions) (sysnet.pe.kr)
.NET Framework: 959. C# 9.0 - (9) 레코드(Records) (sysnet.pe.kr)
.NET Framework: 961. C# 9.0 - (10) 대상으로 형식화된 조건식(Target-typed conditional expressions) (sysnet.pe.kr)
.NET Framework: 962. C# 9.0 - (11) 공변 반환 형식(Covariant return types) (sysnet.pe.kr)
.NET Framework: 963. C# 9.0 - (12) foreach 루프에 대한 GetEnumerator 확장 메서드 지원(Extension GetEnumerator) (sysnet.pe.kr)
.NET Framework: 964. C# 9.0 - (13) 모듈 이니셜라이저(Module initializers) (sysnet.pe.kr)
.NET Framework: 965. C# 9.0 - (14) 부분 메서드에 대한 새로운 기능(New features for partial methods) (sysnet.pe.kr)
.NET Framework: 966. C# 9.0 - (15) 최상위 문(Top-level statements) (sysnet.pe.kr)
.NET Framework: 974. C# 9.0 - (16) 제약 조건이 없는 형식 매개변수 주석(Unconstrained type parameter annotations) (sysnet.pe.kr)
C#의 역사를 이곳에서 확인할 수 있습니다.
C# 10에 대한 정리 입니다.
C# Next (11 후보) 정리 입니다.