Basic Programming(기초 프로그래밍)/C#

[C#] C#은 무엇인가 그리고 C#을 하기 위해서는?

Master_Worm 2021. 3. 28. 11:04

  C#(씨샵이라 말합니다.) C#은 C라고 이름붙어진 형제에서 마지막으로 나온 언어 중 하나입니다. C# 외에도 C언어, C++(씨플플이라 읽습니다.)가 앞에 존재하지만 업그레이드의 버전은 아닙니다. (어떤 의미로는 업그레이드라고도 볼 수 있지만 엄밀히 다른 부류의 언어이지 업그레이드 된 언어라 보기는 힘듭니다.) 

 

 이러한 C#은 객체지향적 언어이며, 개발자가 사용하기 쉽게끔 나왔습니다. 여러가지 특성이 존재하지만 초보자의 관점에서는 대략 이러한 느낌입니다. 프로그래밍을 접하는데 C#은 어떤가요? 라고 했을 때, C#은 충분히 처음에 배우기 편한 언어임은 분명합니다. (Python과 마찬가지로 강력한 언어이죠.) 문법적 특성은 C언어가 더 적고 사용하기 편할지 몰라도 실제로 메모리 관리나 프로그래머에게 많은 자유를 준 만큼 C언어는 프로그래머가 고려해야할 사항이 많아지는 단점이 있죠. 게다가 C언어로 100줄을 작성해야할 코드가 C#이나 파이썬으로 넘어가면 작성해야할 코드가 20줄로 끝날 정도로 간편해지기도 했습니다. (물론 상황에 따라 다르겠지만, C언어 보다 C#, 파이썬이 사람의 언어(자연어)에 가깝기 때문에 작성하기가 더욱 편리합니다.)

 

  C#을 사용하는 IDE는 여러 가지가 있지만, 대표적으로 Visual Studio와 MonoDevelop 등이 있습니다. 물론 이외에도 다양한 C#을 지원하는 IDE가 존재합니다. 앞으로의 포스팅에서는 Visual Studio를 통해 진행할 예정이지만, 설치가 힘든 분들은 웹에서 제공하는 컴파일러를 사용하셔도 괜찮습니다. 충분히 우리의 실습을 커버할 수 있습니다. OnlineGDB

 

Online C# Compiler - online editor

OnlineGDB is online IDE with C# compiler. Quick and easy way to run C# program online.

www.onlinegdb.com

 

C#에 대략적인 이야기는 이 정도만 알고 넘아가셔도 충분합니다. 다만 밑에 적혀질 이야기는 C#에 대해 조금 더 생각해보자란 의미에서 더 적어두도록 하겠습니다. 

 

1. C#


 C#이라는 이름의 유래는 C++에서 C++++ 네 개의 +를 2개씩 쌓아 올리면 # 모양이 되기 때문에 C#으로 만들어졌다.  Java는 JVM(자바 가상머신)을 활용해 어떤 플랫폼에 상관없이 사용할 수 있는 장점을 필두로 생산성 향상을 도모했다. 한번 작성하고 어디서든 사용할 수 있도록 하는 것이 큰 장점으로 다가왔다. 그래서 C# 또한 이러한 양상을 따라가기 위해 만들어졌다. 그래서 Java에서 JVM(자바 가상머신)이 필요했듯, C#은 닷넷 프레임 워크가 필요하다. (정확히는 Java를 MS에서 만들어낼 때, J#이라 만들어냈는데, 저작권 문제로 C/C++, Java의 장점을 모아서 C#으로 다시 출시하게 되었다.)

 

  그렇다면 C#, Java가 무조건 더 좋은가? 라는 질문에는 그렇다고 볼 수도 있고 아니라고 볼 수도 있다. 초기 C#, Java는 성능면에서 불리한 점이 너무나도 많았다. 물론 이는 지금도 비슷하다. C/C++ 이 더 빠른건 설계상 차이점이 생길 수 밖에 없다. 태생적 한계가 분명히 존재한다. 가상 머신을 넣는 순간 느리지는건 어쩔 수 없다. 가상머신이 없는 C/C++은 C#, Java보다는 당연히 빠르다. 하지만 가상머신이 없으므로 윈도우에서 만들어진 것을 다른 운영체제에서 사용할 수 없다. 그래서 이를 바꿔주는 작업을 해야 한다. Java는 이럴 필요가 없는 것이다. 또한 메모리 관리 측면과 자연어에 가까운 언어가 사람이 쓰기 편한 언어이다. Java와 C#은 사람이 쓰기 조금 더 편하다.

 

  그럼에도 불구하고 프로그램 언어의 인기 순에는 항상 C/C++를 빼놓고 이야기할 수 없다. 이는 하드웨어를 컨트롤할 수 있는 언어는 결국 C언어이며, C++은 메모리 관리를 직접할 수 있다는 장점이 있다. 그래서 여전히 사라지지 않고 큰 인기를 누리고 있다. (리눅스의 기반 언어는 C로 이루어져 있으므로 이를 다루기 위해서는 반드시 C를 할 수 밖에 없다.)

 

  초기에는 마이크로소프트 플랫폼에 귀속되어 있어서 사용도가 많이 떨어지기도 했지만, 이후에 개선을 거쳐서 업데이트를 통해 개선을 거쳐가는 중이다. 그래서 C#의 인기도 업데이트와 더불어 그 인기가 늘어가는 중이다. 유니티의 기본 개발 언어이기도 하다.

 

 

2. .NET (닷넷)


  C#은 기본적으로 닷넷에서 실행된다. Java가 JVM이라는 자바 가상 머신 위에서 돌아가는 것과 같은 형태이다. CLR(Common Language Runtime) - 공용 언어 런타임이라 하는 가상 실행 시스템이다. CLI(Common Language Infrastructure) - 공용 언어 인프라를 MS(마이크로소프트)에서 구현한 것이다. 

 

  C#으로 작성된 코드는 IL(Intermediate Language) - 중간 언어 라 불리는 것으로 컴파일 된다. (마이크로소프트에서 개발한 CLI를 준수하는 IL 언어로 컴파일된다고 보는 것이 정확할 것이다.) 그리고 CLR을 통해 기계가 읽어들일 수 있는 형태로 로드 된다. 

 

  C# 프로그램이 실행되면 어셈블리가 CLR에 로드되며, 이러한 CLR은 Just - In - Time으로 컴파일을 수행한 다. (우리나라 말로 그 때 그 때 마다) 

  이러한 CLR에서 나온 코드는 기계어로 바꾸어준다. (기계어는 기계가 해석할 수 언어로써 01010의 형태를 갖는 코드를 의미한다.) 0은 꺼짐, 1은 켜짐의 형태로 반도체를 껏다가 켯다가 할 수 있는 것이다.

  

  정리하면, C# 코드 -> 컴파일 -> CIL -> CLR -> 기계어 형태로 변형해주는 것이다. 

 

 

이것 외에도 CLR은 가비지 컬렉션(Garbage Collection) 자동 실행, 예외 처리, 리소스 관리 등 다양한 서비스를 제공한다. CLR에서 실행되는 코드는 관리 코드(Managed code)라 불린다. 

 

  닷넷의 주요 기능 중 하나는 언어의 상호 호환 가능성이다. C# 컴파일러에서 생성된 CIL 코드는 CTS - 공용 형식 사양)을 따르기 때문에 [한 마디로 표준화가 되어 있다.], C#에서 생성된 CIL 코드 자체는 F#의 .NET 버전과 Visual Basic, C++ 등 CTS(공용 형식 사양)을 따르는 언어와 상호 호환이 가능하다. 그래서 다른 언어로 작서된 것들도 CTS를 따른다면 같은 언어로 작성된 것처럼 서로 참조하며 사용이 가능한 점이 강점이다! 물론 이것 외에도 다양한 라이브러리를 포함하는 것은 당연하다. 

 

.NET 코어에 대해 더 자세한 이야기가 궁금하다면 .NET GitHub을 방문하도록 하자!

.NET은 Winodw, macOS, Linux, RHEL, Tizen (대표적으로 갤럭시 워치 OS) 등을 지원한다. 더 많은 지원이 있지만 이 글에서는 대략 이 정도로 정리하겠다.

 

.NET 언어는 다양한 기능을 지원하는데 

 

  • Type Safety (타입 안정성)
  • Type inference - C#, F#, Visual Basic (
  • Generic Types (제네릭 형식)
  • Delegates (대리자 - C언어나 C++에서 포인터 같은 기능)
  • Lambdas (람다)
  • Events (이벤트)
  • Exceptions (예외)
  • Attributes (특성)
  • Asynchronous code ( 비동기 코드)
  • Parallel Programming (병렬 프로그래밍)
  • Code Analyzers (코드 분석기)

등이 있다. 더욱 자세한 내용은 C#을 배워보면서 하나씩 알아가도록 하겠다.