C# 버전별 변천사 (C#1.0 ~ C#10.0)
C#은 마이크로소프트가 개발한 객체 지향 프로그래밍 언어입니다. 이 언어는 자바와 C++의 장점을 취합하고자 하는 목표로 설계되었으며, 강력한 타입 체크, 배열 경계 체크, 초기화되지 않은 변수의 사용 검사 등과 같은 안전성을 보장합니다.
C#을 통해 다양한 애플리케이션을 개발할 수 있습니다. 예를 들어, 웹 애플리케이션, 윈도우 데스크톱 애플리케이션, 모바일 애플리케이션, 게임 등을 만들 수 있습니다. 특히, 유니티 게임 엔진에서 C#을 주요 스크립팅 언어로 사용하여, 많은 게임 개발자들이 C#을 선호합니다.
C#은 간결하면서도 표현력이 뛰어난 언어입니다. C# 코드는 읽기 쉽고 작성하기 쉬워, 이해도가 높습니다. 또한, C#은 지속적으로 발전하고 있어 최신 프로그래밍 개념과 패러다임을 지원합니다. 예를 들어, 비동기 프로그래밍, LINQ, 패턴 매칭 등의 기능이 있습니다.
마지막으로, C#은 컴파일 언어이기 때문에 실행 시간에 높은 성능을 발휘하며, CLR(Common Language Runtime)에 의해 관리되는 언어라 안정성도 보장합니다.
해당 언어의 주요 변천사입니다.
1. C# 1.0 (2002)
- C#의 첫 번째 버전에서는 기본적인 객체 지향 프로그래밍 구조가 도입되었습니다. 이에는 클래스, 인터페이스, 상속, 다형성 등의 기본 개념이 포함됩니다. 또한 이 버전에서는 타입 안전성을 보장하는 특징이 제공되었고, 가비지 컬렉션 기반의 자동 메모리 관리가 도입되었습니다.
2. C# 2.0 (2005)
- C# 2.0에서는 제네릭이 도입되어 타입-세이프 코드를 작성하는 데 더 큰 유연성을 제공했습니다. 제네릭을 통해 컬렉션 등에서 사용하는 객체 타입을 런타임이 아닌 컴파일 타임에 결정할 수 있게 되었습니다.
- 또한 이터레이터, 익명 메서드와 같은 기능도 도입되었고, 부분 클래스를 통해 한 클래스를 여러 파일로 분리하는 것도 가능해졌습니다.
- nullable 타입이 도입되어 값 타입이 null을 가질 수 있게 되었습니다.
3. C# 3.0 (2007)
- C# 3.0에서는 LINQ(Language Integrated Query)가 도입되었습니다. 이를 통해 SQL과 유사한 방식으로 객체, XML, 데이터베이스 등 다양한 데이터 소스에 대해 쿼리를 작성할 수 있게 되었습니다.
- 이 버전에서는 또한 자동 속성, 익명 타입, 확장 메서드, 람다 식 등이 추가되었습니다. 이러한 기능들은 LINQ의 구현을 돕고, 코드의 간결성과 가독성을 높이는데 기여했습니다.
4. C# 4.0 (2010)
- C# 4.0에서는 동적 바인딩을 지원하기 위해 dynamic 키워드가 도입되었습니다. 이를 통해 런타임에 타입을 결정하고 동적 언어와의 상호 작용을 쉽게 할 수 있게 되었습니다.
- 또한 이 버전에서는 인터페이스와 제네릭에서의 공변성과 반공변성을 지원하게 되었고, 이를 통해 타입 안전성을 유지하면서 더 큰 유연성을 얻을 수 있게 되었습니다.
- 이름있는 파라미터와 선택적 파라미터를 도입하여 메서드 호출의 유연성이 증가하였습니다.
5. C# 5.0 (2012)
- C# 5.0에서는 async와 await 키워드를 도입하여 비동기 프로그래밍을 더욱 쉽게 할 수 있게 되었습니다. 이를 통해 비동기 코드를 동기식 코드처럼 간결하게 작성하고 이해할 수 있게 되었습니다.
- 이 기능은 웹 응용 프로그램에서 UI의 반응성을 유지하고, 병렬 처리를 통한 성능 향상을 쉽게 할 수 있게 도와줍니다.
6. C# 6.0 (2015)
- C# 6.0에서는 null 조건 연산자를 도입하여 null 참조 예외를 피할 수 있게 되었습니다. 또한, 자동 속성 초기화, 문자열 보간, nameof 연산자, 예외 필터 등과 같은 여러 가지 기능이 도입되었습니다.
- 이러한 기능들은 코드 작성을 더욱 간결하게 하고 가독성을 높이는 데 도움을 줍니다.
7. C# 7.0 (2017)
- C# 7.0에서는 out 변수, 패턴 매칭, 튜플, 로컬 함수, 비구조화 등의 기능이 도입되었습니다.
- 이를 통해 코드를 더욱 간결하게 작성하고 복잡한 조작을 보다 쉽게 수행할 수 있게 되었습니다.
8. C# 8.0 (2019)
- C# 8.0에서는 null 참조 타입, 인덱스와 범위, 패턴 매칭 확장, 기본 인터페이스 멤버, 비동기 스트림 등의 기능이 추가되었습니다.
- 이를 통해 더 안전하고 간결한 코드 작성을 지원하고, 비동기 프로그래밍에 더 효율적인 도구를 제공하였습니다.
9. C# 9.0 (2020)
- C# 9.0에서는 레코드, 초기화만 가능한 속성, 패턴 매칭의 개선, 상위 형식 추론 등의 기능이 추가되었습니다.
- 레코드 타입을 도입하여 불변 객체를 더욱 쉽게 만들 수 있게 되었고, 패턴 매칭이 더욱 강화되어 코드 작성의 유연성이 증가하였습니다.
10. C# 10.0 (2021)
- C# 10.0에서는 레코드 구조체, 전역 using 지시문, 이름 없는 람다, 파일 스코프 네임스페이스 등의 기능이 추가되었습니다.
- 이를 통해 더욱 간결한 코드를 작성하고, 코드의 구조와 조직을 더 효과적으로 관리할 수 있게 되었습니다.
아래는 C# 8.0 이후의 변화에 대한 좀 더 상세한 예제 소스코드입니다.
1. C# 8.0 (2019)
- null 참조 타입
string? nullableString = null; // nullableString은 null을 가질 수 있습니다.
- 인덱스와 범위
var numbers = new int[] {0, 1, 2, 3, 4, 5};
var lastNumber = numbers[^1]; // "5", ^ 연산자를 사용하여 배열의 끝에서부터 인덱싱
var slicedNumbers = numbers[1..^1]; // "1, 2, 3, 4", 범위 연산자를 사용하여 슬라이싱
- 비동기 스트림
public async IAsyncEnumerable<int> GetBigNumbers()
{
await foreach (var number in numbers)
{
if (number > 1000)
yield return number;
}
}
2. C# 9.0 (2020)
- 레코드
public record Person(string Name, int Age);
var john = new Person("John", 23);
- 초기화만 가능한 속성
public class Person
{
public string Name { get; init; }
public int Age { get; init; }
}
var john = new Person { Name = "John", Age = 23 };
3. C# 10.0 (2021)
- 레코드 구조체
public record struct Point(int X, int Y);
var point = new Point(1, 2);
- 전역 using 지시문
// 예를 들어, 프로젝트 전체에서 System 네임스페이스를 사용하려면 다음과 같이 선언합니다.
global using System;
- 이름 없는 람다
Func<int, int> double = static(x) => x * 2;
- 파일 스코프 네임스페이스
// 파일 내 모든 코드가 특정 네임스페이스에 속하도록 지정할 수 있습니다.
namespace MyNamespace;
public class MyClass { }
'C#' 카테고리의 다른 글
C# listbox 같은 항목 다시 클릭 인식 (0) | 2016.08.02 |
---|---|
C# WPF 유니코드 표현하기 (유니코드 재생, 일시정지, 정지, 녹음 표현) (0) | 2016.07.31 |
C# FontStyle Bold,Italic,Strikeout,Underline 보존된 채로 상태 변경 (0) | 2016.07.25 |
C# RichTextBox 폰트 크기 조절 (0) | 2016.07.25 |
C# RichTextBox Bold(글자 굵기 변경) (0) | 2016.07.25 |