일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- leetcode
- vue.js
- C#
- nginx
- vuetify
- type
- VUE
- property
- security
- docker
- AI
- TypeScript
- scss
- git
- generic
- C++
- 앙상블
- loop
- Python
- dotenv
- bash
- Clone
- webpack
- 보안
- var
- machine learning
- npm
- BOJ
- JavaScript
- condition
- Today
- Total
ice rabbit programming
[C#] C#을 시작하며, .NET Framework 본문
학부생 시절 나름 여러 언어를 사용해 보았다.
수업 때 사용하고 PS에서 주로 사용한 C++을 시작으로, 안드로이드에서 Java, 웹에서 JavaScript, OpenCV와 Tensorflow에서 Python 등 자료가 풍부하고 쉽게 접할 수 있는 것들은 조금씩 건드려 보았다.
소프트웨어 개발 분야 중 특별하게 관심 있는 분야는 따로 없어서, 막연하게 백엔드 서버 개발자 정도로 생각하고 있었다. 그래서 Java(Spring) 아니면 JavaScript(Node.js)를 하게 되지 않을까 하는 생각을 가지고 있었다.
그런데 뜻밖에도 졸업 후 입사하여 신입 주니어 개발자가 되고서는 C#을 다루게 되었다.
C#과 .NET Framework
C# 언어는 MS에서 개발한 2000년 PDC에서 발표한 언어이다. C++++에서 C#이 유래되었다는 말이 있다(2x2로 쌓으면 #이 되므로). 처음 C#을 쓰게 된다고 듣고 약간 찾아보았을 때, 계속 .NET Framework가 함께 나와서 왜 나올까 생각했었다. 필자가 그 전까지 봤던 .NET Framework는 윈도우에서 알 수 없는 오류 났을 때 알림창에 뜨던 정도였으므로..
Java의 JVM과 유사하게 C#은 .NET Framework를 사용한다. 때문에 C# 공부할 때는 .NET이 자연스럽게 따라다닌다. 다만, JVM과는 달리 .NET Framework는 다른 언어들도(심지어 예전에는 Java까지) 지원한다. 그래서 .NET에 대해서 검색하다 보면 Visual Basic에 대한 내용도 심심치 않게 검색이 된다.
.NET Framework를 사용하는 이유는, 컴파일한 중간 언어(C#에서는 CIL) CPU와 OS에 독립적으로 가상머신이 실행해주기 때문이다. 이런 중간 언어를 실행해주는 환경을 CLR(Common Language Runtime)이라고 한다. 이 CLR에서는 Linq와 같은 FCL(Framework Class Library)를 제공하여 각 언어에서 쓸 수 있도록 해 준다.
.NET Framework가 여러 언어를 지원하다 보니, 자료형이 꼬일 수 있다. 즉, 명칭이나 비트 수가 다른 문제가 생길 수 있다. 이를 해결하기 위해 각 언어에 자료형의 alias를 제공해 준다.
이를테면, C#에서 int라고 쓰면 .NET에서 실제로는 Integer32로 사용한다는 것이다. 고로 각 언어 개발자들은 평소와 같이 쓰면 되는 것이고 실제로 컴파일 될 때에는 알아서 맞게 컴파일된다.
언어와 CLR이 독립적으로 움직이다 보니, 버전 또한 다르게 움직인다. 그래서 C# 7.3을 사용하려면 .NET Framework가 4.7.2 이상이어야 한다거나 하는 버전 맞춤이 필요하다.
2020년 현재 최신 기준은 C# 8.0 - .NET Framework Core 3.0이다.
(.NET Framework Core : 리눅스 플랫폼에서 사용할 수 있도록 제공해주는 닷넷)
이제 겨우 2개월 남짓 공부한 것으로 생각해 보면, C++과 Java의 중간 형태인데 Java에 좀 더 가깝다는 느낌이 든다. 포인터가 없다는 것이 C++과의 가장 큰 차이인 것 같다. Java와 유사하게 Interface의 활용도가 높고, GC가 있으며 가상 환경을 통해 실행된다. 포인터가 없으니 인터페이스, 클래스 구조에 좀 더 신경쓰게 되는 것 같다.
다음 글에서는 기본 입출력, 타입에 대해서 정리해보려 한다.
'Development > C#' 카테고리의 다른 글
[C#] 메소드 (0) | 2020.05.04 |
---|---|
[C#] 배열(Array) (0) | 2020.04.30 |
[C#] C#의 자료형3 - Casting과 Boxing (0) | 2020.04.18 |
[C#] C#의 자료형2 - Value vs Reference, Nullable (2) | 2020.04.15 |
[C#] C#의 자료형 (0) | 2020.04.10 |