'C#'에 해당되는 글 8건

  1. 2023.07.15 C# 버전별 변천사 (C#1.0 ~ C#10.0)

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 { }

반응형
prev 1 2 3 4 ··· 8 next