.NET Framework
1. 프레임워크(Framework)란?
1.1 용어
- [어원] 'FRAME (틀, 규칙)' + 'WORK (작업)'
- ≒ 시스템
1.2 시스템은 왜 사용할까?
- 커피 프렌차이즈 매장을 새로 개업한다고 예를 들어 봅시다.
프렌차이즈는, 매장 인테리어, 메뉴구성, 결제 시스템, 접객 및 운영 방법까지 모든 것을 제공합니다. - 제조공정 - 분업과 대량생산, 그리고 생산 효율 향상
1.3 UI 프레임워크 예
- 버튼, 폼 양식, 다이얼로그 등과 같이 자주 사용되는 UI를 미리 구현해서 제공하는 프레임워크이다.
- WPF(Windows Presentation Foundation)
데스크톱 클라이언트 애플리케이션을 만드는 UI(사용자 인터페이스) 프레임워크입니다.
WPF는 애플리케이션 모델, 리소스, 컨트롤, 그래픽, 레이아웃, 데이터 바인딩, 문서 및 보안을 포함하여 다양한 애플리케이션 개발 기능 세트를 지원합니다.
1.4 프레임워크와 라이브러리 차이
프로그래밍 언어도, 정해진 문법과 규칙이 있으나 이를 프레임워크라고 하지 않습니다.
라이브러리 역시 마찬가지입니다. 라이브러리는 실행 가능한 소스 코드의 집합일 뿐입니다.
프로그래밍 언어와 라이브러리는 개발자의 의도에 맞춰 프로그램 로직의 순서와 흐름을 선택하고 수정할 수 있습니다.
반면, 프레임워크는 문법적 규칙 뿐만 아니라, 프로그램의 동작 및 사용 순서와 실행 흐름까지 강제합니다.
어플리케이션에 버튼을 구현한다면, 개발자는 UI 프레임워크가 만들어 놓은 버튼을 사용하고, 버튼에 정의된 규칙에 맞춰 구현하며, 수정 가능한 범위 내에서만 변경할 수 있습니다.
마치 프렌차이즈 매장에서 정해진 인테리어와 레시피만 사용하는 것과 같습니다.
프레임워크에서 제공하는 미리 만들어진 도구나 구조를 사용해 개발한다면, 좀 더 빠르고 효율적인 애플리케이션 개발이 가능함으로 생산성을 비약적으로 향상 시킬 수 있습니다.
2. <닷넷> 프레임워크란?
.NET(닷넷, dotNET)은 "개발환경 플랫폼" 입니다.
닷넷은 다양한 "프로그래밍 언어"를 활용해 Linux, macOS, Windows, iOS, Android 등의 다양한 운영체제에서 콘솔, 데스크톱, 웹 및 모바일 애플리케이션을 만들 수 있는 개발환경을 서비스를 제공하는 플랫폼입니다.
닷넷이 제공하는, <가상환경 기반의 운영체제에 독립적인 실행 환경 기술(CLR)>만으로 개발자를 만족시키는 개발환경 플랫폼 서비스를 제공 할 수 없습니다.
닷넷은 개발환경 플랫폼 서비스를 개발자에게 제공하기 위한 아키텍처로 CLR 외에 개발에 필요한 여러가지 구성 요소를 하나로 묶어 배포하는데, 이것이 "닷넷의 프레임워크" 입니다.
1. 서비스 관점 : "닷넷" 이라고 불리는 "개발환경 플랫폼" 서비스
2. 기술적 관점 : "닷넷의 프레임워크(= CLR + 부가 구성요소)"
- CLR
- Common Language Runtime
- 공용 언어 런타임
- 부가 구성요소
- BCL(Base Class Library)
- 부가적인 실행 파일
- GAC(Global Assembly Cach)
3. 닷넷(.NET) 5.0 이전
3.1 닷넷 히스토리
닷넷(.NET) 5.0 이전 까지 닷넷(.NET) 프레임워크는 파편화 되어 있었습니다.
3.2 닷넷 5.0 이전까지의 닷넷 프레임워크 구조도
- .NET Framework
- 윈도우 플랫폼 프레임워크 입니다.
- 닷넷이 제공하는 프레임워크 중에 이름이 .NET Framework 이라는 프레임워크 입니다.
- .NET Framework는 .NET 의 최초 구현체로 Windows에서 웹 사이트, 서비스, 데스크톱 앱 등을 실행하는 것을 지원합니다.
- .NET Core
- 크로스 플랫폼 프레임워크
- .NET는 Windows, Linux 및 macOS에서 웹 사이트, 서비스 및 콘솔 앱을 실행하기 위한 플랫폼 간 구현체입니다.
- GitHub의 오픈 소스
- .NET은 이전에 .NET Core 였습니다.
- Xamarin / Mono
- 모바일 + 크로스 플랫폼 프레임워크
- Xamarin/Mono은(는) iOS 및 Android를 포함한 모든 주요 모바일 운영 체제에서 앱을 실행하기 위한 .NET 구현입니다.
3.3 닷넷의 기본 라이브러리와 .NET Standard
닷넷 플랫폼은, 개발환경 플랫폼으로, 다양한 "프로그래밍 언어"를 활용해 Linux, macOS, Windows, iOS, Android 등의 다양한 운영체제에서콘솔,데스크톱, 웹 및 모바일 애플리케이션을만들 수 있는 개발환경을 서비스를 제공하는 플랫폼입니다.
닷넷(.NET) 의 최초 구현체는 .NET Framework 이었습니다.
.NET Framework 는 .NET Framework 를 위한 라이브러리 모듈이 존재했고, 이후 추가된 프레임워크(.NET Core, Xamarin 등)를 제공했지만, 각각의 구현체들은 일부라이브러리만 동일하여 호환되거나 는 라이브러리를 기반으로 개발해야 했기에 서로 호환성이 부족했었습니다.
- .NET 구현에서 공통적인 API의 공식 사양입니다.
- .NET 1.0 부터 .NET Framework, .NET Core, Xamarin 과 같은 프레임워크의 라이브러리에 호환성을 위해 공통 라이브러리를 사용하기 시작했지만 각각의 프레임워크간에 완벽하게 호환되지는 못했습니다.
4. 닷넷(.NET) 5.0 이후
4.1 닷넷 프레임워크 통합
2020년 11월 10일, MS는 차세대 애플리케이션 개발플랫폼 프레임워크 닷넷(.NET) 5.0을 공식 발표하였습니다.
.NET 5.0은 .NET Core 를 이어받았습니다.
4.2 닷넷 버전
파편화 되어있던 닷넷 프레임워크들은, 닷넷(.NET) 이라는 명칭으로 프레임워크가 통합되며, 다양한 유형의 애플리케이션을 빌드하기 위한 무료 오픈 소스 개발자 플랫폼으로 진화했습니다.
04.3 닷넷(.NET) 라이브러리
닷넷 스텐다드는, 닷넷 5.0 이후 .NET Standard 2.1로 통합되어 사실상 별도의 명칭으로 불리지 않고, 새로운 .NET Standard 버전이 없습니다.
4.4 Visual Studio 버전과 C#, .NET 버전
Visual Studio 버전별로 사용 가능한 C# 버전과, .NET 버전이 상이하다.
Visual Studio 2017은 C# 7.3 버전 .NET Framework 4.7.2, .NET Core 2.1 까지 사용 가능하다.
C# 8.0 문법, .NET Core 3.0 을 사용하고 싶다면, Visual Studio 2019 를 사용해야 한다.
.NET 6 를 이용하고 싶다면, Visual Studio 2022 이상을 사용해야 한다.
아래 이미지는 Visual Studio Installer에서 Visual Studio 2017의 추가 설가 설치는 아래와 같이 진행한다.
Visual Studio 2017 버전이기 때문에, [ Individual components ] 탭에서 .NET 5, .NET 6 등을 추가 설치 할 수 없다.
애플리케이션 모델 프레임워크
- 프레임워크: 개발자 도구 및 라이브러리의 모음
- 웹 애플리케이션
- 모바일 애플리케이션(iOS 및 Android)
- 데스크톱 애플리케이션
- 기타 애플리케이션
닷넷(.NET) 런타임
- 공용 언어 런타임(CLR)
- CIL(Common Intermediate Language)
- JIT(Just-In-Time) 컴파일
- .NET Native AOT
- OS가 이해할 수 있는 Native Code 로 변환
- 컴파일 타임에 중간 코드를 실행 환경에 적합한 Native Code로 컴파일을 모두 완료한다.
- .NET 7
- 윈도우, 리눅스의 x64, ARM64 프로젝트
- .NET 8
- 2023년 2월 21일 지원 확장
- 윈도우, 리눅스의 x64, ARM64 프로젝트
- 안드로이드, macOS, iOS, iOSSimulator, tvOS(ARM64만 지원), tvOSSimulator, MacCatalyst용 x64, ARM64 프로젝트도 지원
- OS가 이해할 수 있는 Native Code 로 변환
C# Source Code -> C# 컴파일 -> CIL Code -> JIT 컴파일(r) -> Native Code
C# Source Code -> C# 컴파일 -> CIL Code -> AOT 컴파일(c) -> .NET Native Code