닷넷과 C# 개요
.NET과 C#의 관계는 플랫폼과 언어의 관계로 이해할 수 있습니다. .NET은 개발 플랫폼, C#은 프로그래밍 언어로, 두 기술은 상호 보완적이며 밀접하게 연결되어 있습니다.
.NET과 C#의 기본 개념
.NET
- Microsoft가 개발한 개발 플랫폼.
- 애플리케이션 개발 및 실행을 위한 런타임CLR, Common Language Runtime과 라이브러리Base Class Library, BCL를 제공.
- 다양한 언어를 지원(C#, VB.NET, F#, 등).
C#.
- Microsoft가 개발한 프로그래밍 언어.
- .NET 플랫폼에서 실행되도록 설계.
- 객체 지향 언어OOP로 시작하여, 함수형, 비동기 프로그래밍 등 현대적 개발 패러다임을 지원.
.NET과 C#의 관계
C#은 .NET의 주요 언어
- C#은 .NET 플랫폼을 위해 설계된 주요 언어이며, 대부분의 .NET 애플리케이션이 C#으로 작성
- CLR에서 실행되는 ILIntermediate Language로 컴파일되어, .NET의 런타임 환경에서 실행.
.NET은 C#의 실행 환경
- .NET은 C# 코드를 실행하기 위한 런타임CLR와 라이브러리BCL를 제공
- C# 개발자는 .NET이 제공하는 풍부한 API와 라이브러리를 활용해 애플리케이션을 개발.
독립적이지만 상호 보완적
- C#은 .NET 외에도 다른 플랫폼에서도 실행 가능(예: Unity, Mono).
- .NET은 C# 외에도 다른 언어(VB.NET, F#, 등)로 작성된 코드를 지원.
.NET과 C#의 구조적 관계
.NET Platform
├── CLR (Common Language Runtime)
│ ├── IL 실행 및 관리
│ ├── 메모리 관리 (GC)
│ ├── Just-In-Time 컴파일
│
├── BCL (Base Class Library)
│ ├── 파일 I/O, 컬렉션, 네트워킹, 스레드 등
│
├── C# (언어)
│ ├── .NET을 위한 주요 언어
│ ├── CLR에서 실행되도록 컴파일
│
├── VB.NET, F#, 등
│ ├── 다른 언어들도 .NET에서 실행 가능발전 과정
초기 닷넷 시대와 C#의 탄생(2000년대 초반)
- .NET Framework 1.0(2002년 발표)와 함께 C# 1.0이 공개
- 이 시기 C#은 Java의 문법 스타일을 참조하면서도, .NET CLRCommon Language Runtime 위에서 돌아가는 고성능, 타입 안정성, 가비지 컬렉션 등의 특징을 갖춘 언어로 자리매김함
- WinForms, ASP.NET, ADO.NET 등 .NET Framework의 주요 기능들과 함께 C#은 주류 개발 언어로 빠르게 확산
.NET Framework 시대(C# 2.0~C# 5.0)
- C# 2.0(2005년): 제네릭Generics, 익명 메서드, null 가능 형식nullable types 등 현대적 언어 기능이 대거 도입되어 생산성과 안정성이 향상
- C# 3.0(2007년): 람다식, 확장 메서드Extension Methods, LinqLanguage Integrated Query 도입으로 데이터 질의 패러다임을 획기적으로 개선하고, 함수형 프로그래밍 스타일 일부를 수용
- .NET에서 데이터 접근 및 가공이 훨씬 간결해짐
- C# 4.0(2010년): 동적 타입dynamic 지원, named/optional 파라미터 도입으로 상호운용성 및 개발 편의성 확대
- C# 5.0(2012년): 비동기 프로그래밍을 위한 async/await 키워드 도입으로, .NET 프레임워크 위에서 비동기 프로그래밍 모델이 획기적으로 단순화
- 서버 및 클라이언트 애플리케이션의 반응성과 확장성 개선
.NET Core 시대와 C#의 진화(C# 6.0 ~ C# 7.x)
- 마이크로소프트가 오픈소스 및 크로스플랫폼 전략으로 전환하며 .NET Core(2016년) 출시
- Windows에 종속적이던 .NET 환경을 Linux, macOS 등 다양한 환경으로 확장
- C# 6.0(2015년): nameof, 문자열 보간string interpolation, null 조건부 연산자(?.) 등을 도입하여 코드의 간결성과 가독성 향상
- C# 7.x(2017~2018년): 튜플Tuples, 패턴 매칭Pattern Matching, ref local/returns, 비동기 메인async Main 등을 지원하여, 함수형, 분해 할당, 패턴 기반 로직 작성 등 한층 현대적인 프로그래밍 스타일을 더 광범위하게 수용
.NET 5 및 .NET 6 시대(C# 8.0, 9.0, 10.0):
- .NET 5(2020년)와 .NET 6(2021년)으로 .NET Framework와 .NET Core가 사실상 하나의 런타임(.NET)으로 통합되는 방향 확립
- C# 8.0(2019년): nullable reference type을 통한 null 안정성 제고, switch 식switch expressions, 새로운 인터페이스 멤버(디폴트 인터페이스 메서드) 등으로 안전성과 모던한 프로그래밍 패턴 강화.
- C# 9.0(2020년): 기록 타입Records, 패턴 매칭의 확장, init 전용 setter, 최상위 문top-level statements 도입으로 불변 데이터 구조, 간결한 프로그래밍 스타일을 적극 지원
- C# 10.0(2021년) 및 그 이후 버전: 전역 using 지시문global using, 파일 스코프 네임스페이스file-scoped namespace 등 더 단순화된 문법을 제공하며, MAUI.NET Multi-platform App UI나 Blazor 등 새로운 .NET 기술과 시너지를 낼 수 있는 언어적 기반을 갖춤
현재와 미래 방향
- C#은 데스크톱, 웹, 클라우드, 모바일, 게임(Unity), IoT, Blazor(웹프론트), MAUI(멀티플랫폼 UI) 등 닷넷 생태계의 모든 영역에서 활용 가능한 범용 언어로 자리잡음
- 언어 설계팀은 주기적으로 언어 제안(C# Language Proposal)을 검토하며, 비동기 스트림async streams, 패턴 매칭 고도화, 불변성 강화, 성능 최적화, 클라우드-네이티브 환경 적합성 강화 등 현대 소프트웨어 개발의 추세에 맞추어 C#을 지속 진화
- 닷넷 런타임 개선(성능 최적화, GC 성능 향상, JIT/AOT 지원 확대)과 함께 C#도 이를 최대한 활용할 수 있도록 언어 기능이 연마되며, 개발자 생산성을 높이는 방향으로 나아가고 있음