최근 수정 시각 : 2022-07-22 13:36:29

C#

파일:하위 문서 아이콘.svg   하위 문서: C#/문법
,
,
,
,
,
#!wiki style="display: inline; display: none;"
, }}}
[include(틀:링크시 주의, 링크= C\ 또는 # 또는 C#)]
파일:Microsoft 로고.svg
{{{#!wiki style="margin:0 -10px -5px"
{{{#!folding [ 펼치기 · 접기 ]
{{{#!wiki style="margin:-6px -1px -11px"
{{{#000,#e5e5e5
산하 계열사 및 사업부
GitHub · .NET Foundation · Xbox Game Studios · LinkedIn
제품군
하드웨어 Surface · Xbox · HoloLens · PixelSense · Zune
소프트웨어 Windows · Office · Edge · Media Player · Hyper-V · Microsoft Defender · Visual Studio Code · Visual Studio · Windows Terminal · Microsoft PowerToys · Internet Explorer · MS-DOS · Windows Movie Maker · Autoruns
서비스 Microsoft Azure · OneDrive · Skype · MSN · Bing · LinkedIn · Cortana · 테이 · Xbox network · 정품 인증 · MSDN
관련 기술 ASF · ASP · Blazor · COM · DCOM · DirectX · 파일 시스템( FAT · NTFS · ReFS) · MFC · .NET( .NET Core · .NET Standard · C# · F# · Visual Basic .NET · Windows Forms · WPF · Universal Windows Platform · ASP.NET · ML.NET) · OLE · Silverlight · Visual Basic · VBA · WASAPI · Windows 커널 · Windows 디자인 · Windows API · Windows Runtime · WMA · WMV · Xamarin · XNA
관련 인물
빌 게이츠(은퇴) · 폴 앨런(은퇴) · 스티브 발머(퇴사) · 게이브 뉴웰(퇴사) · 사티아 나델라 · 필 스펜서
기타
Microsoft의 제니맥스 미디어 인수 · Microsoft의 액티비전 블리자드 인수 · 빌 게이츠의 굴욕
관련 틀
365 제품군 · 하드웨어 제품군 · Surface 제품군 · Windows 제품군
}}}}}}}}}}}} ||

프로그래밍 사이트 선정 상위 점유율 프로그래밍 언어 목록
{{{#!wiki style="margin: 0 -10px -5px"
{{{#!wiki style="display:inline-block; margin:0 0 -5px; min-width:25%"
{{{#!folding ⠀[ IEEE Spectrum 2021 ]⠀
{{{#!wiki style="margin:-6px -1px -10px"
IEEE Spectrum에서 집계한 2021년 기준, 웹 분야 상위 10개 프로그래밍 언어
1 Python 2 Java 3 Javascript 4 C# 5 Go
6 HTML 7 PHP 8 Dart 9 Ruby 10 Rust
IEEE Spectrum에서 집계한 2021년 기준, 모바일 분야 상위 10개 프로그래밍 언어
1 Java 2 C 3 C++ 4 C# 5 Swift
6 Dart 7 Kotlin 8 Scala 9 Objective-C 10 Delphi
}}}}}}}}}
⠀[ Stack Overflow 2021 ]⠀
||<table width=100%><width=2000><-10><bgcolor=#FFA500><table bgcolor=#fff,#222> Stack Overflow에서 조사한 2021년 기준 사용률 상위 25개 프로그래밍 언어
1 JavaScript 2 HTML, CSS 3 Python 4 SQL 5 Java
6 Node.js 7 TypeScript 8 C# 9 Bash 10 C++
11 PHP 12 C 13 PowerShell 14 Go 15 Kotlin
16 Rust 17 Ruby 18 Dart 19 어셈블리어 20 Swift
21 R 22 VBA 23 MATLAB 24 Groovy 25 Objective-C
⠀[ TIOBE 2022 ]⠀
||<table width=100%><width=2000><-10><bgcolor=deepskyblue><table bgcolor=#fff,#222> TIOBE에서 선정한 2022년 2월 기준 검색어 점유율 상위 20개 프로그래밍 언어
1 Python 2 C 3 Java 4 C++ 5 C#
6 Visual Basic .NET 7 JavaScript 8 PHP 9 어셈블리어 10 SQL
11 Classic
Visual Basic
12 R 13 Go 14 Fortran 15 Groovy
16 Swift 17 Ruby 18 Perl 19 MATLAB 20 Delphi /
Object Pascal
{{{#!wiki style="margin:0 -10px -5px"
{{{#!folding [ 21위 ~ 50위 펼치기 · 접기 ]
{{{#!wiki style="margin:-6px -1px -10px"
21 Objective-C 22 Prolog 23 Scratch 24 SAS 25 LISP
26 COBOL 27 Rust 28 Ada 29 Dart 30 Transact-SQL
31 PL/SQL 32 ABAP 33 VBScript 34 LabVIEW 35 Julia
36 Scala 37 TypeScript 38 Kotlin 39 Haskell 40 Lua
41 Apex 42 Visual FoxPro 43 Bash 44 Scheme 45 D
46 PL/I 47 Elixir 48 Logo 49 PostScript 50 Ladder Logic }}}}}}}}}
⠀[ PYPL 2022 ]⠀
||<table width=100%><width=2000><-10><bgcolor=green><table bgcolor=#fff,#222> PYPL에서 선정한 2022년 3월 기준 검색어 점유율 상위 20개 프로그래밍 언어
1 Python 2 Java 3 JavaScript 4 C# 5 C/ C++
6 PHP 7 R 8 Objective-C 9 TypeScript 10 Swift
11 MATLAB 12 Kotlin 13 Go 14 Rust 15 Ruby
16 VBA 17 Ada 18 Abap 19 Dart 20 Visual Basic
}}}
프로그래밍 언어 목록 · 분류 · 문법

파일:C# 로고.svg

1. 개요
1.1. 이름에 대해
2. 역사3. 문법4. 특징
4.1. Java와의 비교4.2. 호환성 및 범용성4.3. 모노4.4. .NET Core4.5. Windows Forms vs WPF
5. 통합 개발 환경(IDE)6. 완성도와 점유율7. 기타8. 관련 문서

1. 개요

C# 9.0 이전까지
#!syntax csharp
using System;

class Program {
    static void Main(string[] args) {
        Console.WriteLine("Hello, world!");
    }
}

C# 6.0 부터[1]
#!syntax csharp
using static System.Console;

class Program {
    static void Main(string[] args) => WriteLine("Hello, world!");
}

C# 9.0부터[2]
#!syntax csharp
System.Console.WriteLine("Hello, world!");

C# 10.0부터[3]
#!syntax csharp
Console.WriteLine("Hello, world!");

2000년 7월에 개최되었던 Professional Developers Conference(PDC)에서[4] .NET 프로젝트와 함께 발표된 객체 지향 프로그래밍 언어. 한국어로 쓸 때는 '씨샵', '씨 샤프'등 으로 쓴다. 마이크로소프트에서 개발되었으며, 1983년에 등장한 C++와 1995년에 등장한 Java에서 강한 영향을 받았다. 확장자는 .cs다.

온라인 상으로 코드를 실행시켜 보고 싶다면 여기로.

유니티의 스크립팅 언어로도 쓰이고 있다.

1.1. 이름에 대해

이름의 유래는 두 가지에서 따왔다고 한다. # 첫 번째 의미는 음악에서 유래한 것으로, 도(C)에 반음(#)을 올린 것.[5] MS에서는 출판물 등에서 키보드의 # 대신 유니코드의 반음 올림 기호(, U+266F)를 쓰기도 한다. 두 번째 의미는 많은 사람들이 알고 있듯이 C++ ++라는 뜻이다. ++++을 세로로 쌓으면 시각적으로 # 모양이 되기 때문. 한때 해커들 사이에서 유행했었던 리트의 일종이다.
++
++
#

여담으로 초기 이름은 Cool(C-like Object Oriented Language) 이었다고 한다. 확장자가 .Cool이면 재밌을 것 같다는 이유 등으로 직원들에게 인기 있는 이름이었으나, Cool이라는 단어로는 검색을 하면 다른 것들이 훨씬 많이 나올 것이기 때문에 도중에 바꿨다고. 아니나 다를까 Cool보다도 훨씬 자주 쓰는 동사를 이름으로 가진 프로그래밍 언어는 검색 편의성이 영 좋지 못하다. 현재는 누가 Cool이라는 이름으로 프로그래밍 언어를 개발했다고 한다[6]

2. 역사

1995년에 Java가 나오자 MS에서도 썬 마이크로시스템즈와 라이센스를 맺은 뒤 독자적인 Java 확장 언어 비주얼 J++를 만들었다. 그런데 썬에서 개발한 JVM에 MS가 임의로 부가 기능을 추가하면서 썬과 특허권 소송이 걸리는 바람에, MS의 Visual Studio에서 비주얼 J 시리즈와 MS VM(MS 버추얼머신)을 사용할 수 없게 되었다. 하지만 Java라는 언어 자체가 매력적인 언어이고 MS 역시 이를 버릴 수 없다고 생각한 것인지, 1999년부터 개발에 착수하고 2000년에 .NET 프로젝트와 함께 C#이라는 이름으로 새로운 언어를 발표한다.

C# 2.0 까지는 ECMA 및 ISO 두 곳 모두에 표준이 등재되어 있으나, 이후 버전은 C# 5.0만이 ECMA 표준이 등재되어 있다.

플랫폼은 .NET Framework .NET Core 기준이며, 전자와 구분이 다른 Microsoft .NET Standard는 여기에 기재하지 않는다.
<rowcolor=#ebe72b> 버전 플랫폼 표준 출시일 Visual Studio 대응 버전 변경 사항
1.0 .NET Framework 1.0 ECMA-334 2002년 1월 .NET 2002 링크
1.1 .NET Framework 1.1 2003년 4월 .NET 2003 -
2.0 .NET Framework 2.0 2005년 11월 2005 링크[7]
3.0 .NET Framework 2.0~3.5 - 2007년 11월 2008 링크[8]
4.0 .NET Framework 4.0 - 2010년 4월 2010 링크[9]
5.0 .NET Framework 4.5 ECMA-334 2012년 8월 2012 링크[10]
6.0 .NET Framework 4.6
.NET Core 1.0
.NET Core 1.1
- 2015년 7월 2015 링크[11]
7.0 .NET Framework 4.6.2 - 2017년 3월 2017 v15.0 링크[12]
7.1 .NET Framework 4.7
.NET Core 2.0
- 2017년 8월 2017 v15.3 링크[13]
7.2 .NET Framework 4.7.1 - 2017년 11월 2017 v15.5 링크[14]
7.3 .NET Framework 4.7.2
.NET Core 2.1
.NET Core 2.2
- 2018년 5월 2017 v15.7 링크[15]
8.0 .NET Framework 4.8
.NET Core 3.0
- 2019년 9월 2019 v16.3 링크[16]
9.0 .NET 5.0 - 2021년 4월 2019 v16.9 링크[17]
10.0 .NET 6 - 2021년 11월 2022 링크

3. 문법

파일:상세 내용 아이콘.svg   자세한 내용은 C#/문법 문서
번 문단을
부분을
참고하십시오.

4. 특징

4.1. Java와의 비교

Java가 자바 가상 머신이 필요하듯이 C#은 닷넷이 필요하다. 닷넷 대신 비교적 작은 사이즈의 가상머신에 올려서 실행시키는 방법도 있다.

성능 관련해서는, 사실 Java가 처음 나왔을 때 성능 때문에 많은 포화를 맞았고 C#이 상대적으로 큰 논란 없이 입성하기는 했다. 일단은 Java보다 차세대 언어이므로 Java보다 성능적으로 우위인 부분이 많긴 하지만(비슷한 코드에서 평균적으로 10~20% 정도 더 빠르다.) 여전히 C/C++보다는 다소 느리다. 이는 가상머신 언어의 태생적인 한계점이라고 할 수 있다.[18]

4.2. 호환성 및 범용성

라이벌 격인 Java에 비해 MS라는 특정 플랫폼에 강하게 묶여있다는 인식이 널리 퍼져있지만, 공식적으로 2016년에 발표된 .Net Core부터 리눅스를 공식지원했으며, .Net Core 3.0부터는 macOS에서도 잘 동작한다. TIOBE 기준 점유율 측면에서 한때 Objective-C가 C#보다 우위에 있기도 했지만, Objective-C는 Swift의 등장 때문에 점유율이 크게 내려가고 있어 2016년 4월 현재 C#이 Objective-C보다 크게 앞서고 있다. 다만 Swift가 큰 폭으로 오르고 있는 중. #

물론 밑에 서술할 모노 덕분에 Objective-C보다는 범용성이 훨씬 높다. 유니티 엔진의 기본 개발 언어이기도 하다. 크라이엔진도 결국 유니티 엔진에 익숙해진 개발자들을 끌어오기 위해 C# 지원을 시작했다. 언리얼 엔진도 마이크로소프트 소속 개발자들이 제작한[19] MonoUE라는 플러그인을 설치하면 C# 사용이 가능하다. C#으로 안드로이드 iOS용 앱, macOS Cocoa 기반 프로그램을 개발할 수 있도록 해 주는 Xamarin이라는 프레임워크가 있다. 원래 서드파티 상용 프레임워크였으나, MS에 인수되었고, 이후 Visual Studio 2015에 기본 탑재되었다.

이렇게 MS가 노선을 바꾸면서 C#의 지원범위는 점점 늘어나서 리눅스[20]와 임베디드[21] 분야까지 섭렵 가능한 매우 넓은 분야를 커버할수 있는 언어가 되었다.

Visual Studio의 확장 프로그램(플러그인) 개발에 쓰이는 언어이기도 하다.

4.3. 모노

윈도우 이외의 운영체제에서도 C# 사용이 가능하도록 모노라는 프로젝트가 진행 중이다. 아직 그다지 완전하다고 볼 수는 없다. MonoDevelop/Xamarin Studio IDE가 제공되어, 개발도 다른 플랫폼에서 할 수는 있지만 Visual Studio만큼의 편의성을 제공하지는 못한다.[22]

MS는 오랫동안 오픈 소스 진영에 배타적인 태도를 보여 왔고, 닷넷에 공개되지 않은 뭔가, 또는 MS에 특허가 있는 것을 넣어서 MS가 만들지 않은 프레임워크는 대부분의 기존 프로그램(.NET 프레임워크용으로 만든)이 잘 안 돌아가는 무용지물이 되거나, 나중에 특허 소송으로 프로젝트를 아예 개발살낼 가능성을 완전히 배제할 수 없었다. 이 때문에 리처드 스톨먼 등 여러 사람이 'C#과 모노를 써서는 안 된다'고 한 적도 있다. 결국 MS는 2006년 커뮤니티 공약이라는 것을 발표하면서 ECMA 표준에 의한 구현에 대해서는 특허권을 주장하지 않기로 하였다.

하지만, 얼마 지나지 않아 모노의 주 구성 요소 대부분이 저 커뮤니티 공약의 적용 범위에 포함되지 않기 때문에 모노가 아직도 언제든지 특허 소송을 통해 개발살날 수 있다는 것이 밝혀져 모노 위험 요소설이 다시 부상하였다.

그러나 2010년대 이래 MS는 친(親) 오픈 소스적인 행보를 보여, 2014년엔 닷넷을 오픈 소스로 공개하였으며[23], MS가 모노 프로젝트의 주요 메인테이너인 Xamarin을 인수하면서 이러한 우려는 종식되었다. 그후 MS가 Xamarin 인수 이후 사실상 프로젝트 자체가 MS로 넘어갔다.[24] Git 기여자를 보면 Microsoft 개발자가 대다수다. 2015년 4월 29일에 배포된 Mono 4.0 버전에서는 아예 닷넷의 오픈소스 플랫폼인 .NET Core가 적용되었다.

2017년 5월에 Visual Studio의 macOS 버전이 공개되어서[25], macOS에서도 정식으로 C# 개발을 할 수 있게 되었다.

자신이 유료 IDE에 돈을 지불할 의향이 있다면 JetBrains Rider라는 선택지가 있다. Java IDE로 유명한 IntelliJ IDEA를 베이스로 하고 있어 리눅스를 포함한 크로스플랫폼이 지원되고 완성도가 높으며, MonoDevelop보다 훨씬 뛰어난 코드 컴플리션 및 리팩토링 기능을 제공한다. 또한 유니티 엔진과의 연동도 뛰어나다.

4.4. .NET Core

마이크로소프트가 C#, VB.NET 등 모든 닷넷 프레임워크 기반 언어를 Windows, macOS, Linux 기반에서 돌아가도록 만든 오픈 소스 프레임워크이다. 모노와 .NET Core 프레임워크 모두 오픈소스 기반이나, 모노의 경우 GTK#이라는 다중 플랫폼 GUI를 지원하지만 .NET Core의 경우는 2.x 버전까지 오로지 콘솔 프로그램 개발만을 지원했으나, 버전 3부터는 MS 윈도우 시스템 하에서 WPF와 WinForms를 지원한다.

현재 .NET Core 2.0으로 GUI를 구현할 수 있는 오픈소스 프레임워크가 별도로 존재한다. 이름은 "Avalonia Framework"이다. (아쉽게도 XAML 형식의 디자인만을 지원한다) Avalonia 프레임워크 공식 사이트

4.5. Windows Forms vs WPF

WPF(Windows Presentation Foundation)는 Windows Forms의 부족한 기능 및 디자인 기능을 대처하기 위해서 있는 디자인 특화 사용자 인터페이스이다.

Windows API를 사용하는 Windows Forms와 다르게 WPF는 DirectX 기반으로 동작하며, 윈도우를 생성하는 네이티브 함수인 CreateWindow는 창에만 한정되고 나머지는 직접 그리게 된다.[26] 따라서 버튼의 각도를 변경하는 등 Windows Forms에서 기능상 한계로 불가능한 것들이 가능하다!

WPF는 코드로 UI를 만드는 Windows Forms와 달리 XML 기반 마크업 언어인 XAML을 사용한다.[27] 윈폼과 비교했을 때 컨트롤에서 차이가 있으며, 따라서 윈폼을 사용하다가 WPF를 처음 사용한다면 XAML 부분에서 어려움이 있을 수 있다. 그래서 Visual Studio에서 블렌드(Blend for Visual Studio)라는 별도의 디자이너 IDE가 있을 정도.[28]

Windows Forms를 쓰든 WPF를 쓰든 본인 자유이지만, 일반 프로그램 외에서 유니버셜 윈도우 앱(UWP)과 안드로이드와 아이폰 앱을 만들 수 있는 Xamarin은 XAML 언어를 기본으로 사용하고 있기 때문에 UI 디자인을 예쁘게 꾸미고 싶다면 배우는게 좋다. 아니면 기본적인 것(애니메이션 같은 복잡한 기능 등 제외)만 배우고 포토샵이나 일러스트 등으로 UI에 사용할 사진을 만들고 그걸로 쓰면 될 것이다.

WPF 컨트롤은 Windows Forms에서도 사용할 수 있다.

간단한 비교로 적어보았다.
  • 렌더링
    Windows Forms는 CPU 렌더링 방식( Windows API)이며 연산량이 적고 메모리를 많이 먹지 않아서 비교적으로 가벼운 편이다. 다만 애니메이션 구현이 어렵고 기본적으로 동기 방식이다.
    WPF는 DirectX 렌더링 방식이기 때문에 연산량이 많고(백터 방식), Windows Form과 다르게 무겁고, 메모리를 많이 먹는 편이지만 애니메이션 구현이 쉬우며 기본적으로 비동기 방식이다.
  • 컨트롤과 코드 비하인드
    Windows Forms는 초보자가 사용하기 좋으나 디자인 패턴이 제한적이고 바인딩에 대하여 추가적인 리소스가 있는 편이다.
    WPF는 모던한 디자인 패턴이 가능하고, 바인딩을 염두에 두고 설계되었지만 초보자가 사용하기에는 어렵다.[29]
  • 그래픽
    Windows Forms는 CPU 렌더링이 기본이며 GPU 렌더링이 가능하나 어렵고, 스레드 관리가 귀찮음을 유발하며 프레임 개념에 접근이 어렵다.
    WPF는 GPU로 렌더링이 가능하고 스레드 관리와 프레임에 대한 접근이 쉬운 편이다.
  • 커뮤니티 크기
    Windows Forms는 출시된 후 오랜 시간이 지났기 때문에 자료가 많고 외부 컨트롤 라이브러리가 많다! 참고로 대부분의 외부 렌더링 라이브러리의 경우 GDI를 통해서 그리는 경우가 있는데, 이 경우 WPF와의 성능 차이가 상당히 난다.
    WPF는 최근에 나온 기술이라 자료가 적고 현재 외부 컨트롤 라이브러리가 많아지고 있는 중이다. 다만 일부 외부 렌더링된 컨트롤을 가져오는 경우 성능이 떨어질 수 있다.
  • 엔터프라이즈 레벨
    Windows Forms는 Windows Forms로 만든 프로그램의 크기와 부하가 일정하게 커지며 퍼포먼스 개선이 힘든 편이다. 따라서 디자이너와의 협업이 거의 불가능하다.
    WPF는 WPF로 만든 프로그램의 크기가 커져도 부하가 크게 증가하지 않는다. 프레임 세팅이나 다른 렌더링 설정으로 퍼포먼스 개선이 어느 정도 가능하다. 그리고 디자이너와 분리된 상태에서의 협업이 가능하다.

5. 통합 개발 환경(IDE)

6. 완성도와 점유율

현재 C#의 시장 점유율은 높은 편이고, 언어의 완성도도 현존하는 언어 중 괜찮다는 평이 많다. C++는 생산성이 너무 떨어지고, Java의 경우 여러가지로 제약이 많아 아쉬운 점을 C#이 덜어주고 있다는 것. 코드기어(구 볼랜드)에서 Delphi와 C++Builder를 개발하여 유명해진 Anders Hejlsberg를 영입해 만들었는지라 컴포넌트 개발 환경이 우수하다. 엄청난 생산성을 자랑하던 델파이와 개발환경이 거의 유사하기 때문에 델파이의 개발자들은 거의 C# 개발자로 넘어갔다. Visual Studio 6의 비주얼 베이직과 델파이/C++ Builder/C#을 비교해 보면 서로 간에 안드로메다 급으로 차이가 난다. 뿐만 아니라 GUI를 만들 때도 C#(윈폼/WPF)이 월등히 편리하다.[32] 윈도우즈 개발자들이 UI 작업 이야기 할 때 뭔가 이슈가 있다면 C# 개발자들은 그걸 아주 쉽게 생각한다. 하지만 C++, 특히 MFC 개발자들은... 사실 MFC의 경우 단순히 Win32 API의 래핑수준을 넘지 못하지만, C#의 UI 컴포넌트는 근본 설계부터 컴포넌트 구조를 위해 설계되었으니 당연한 부분이다.

MS사의 개발 도구에서 C#을 강력히 밀어줬는데도 불구하고 2005년 이전까지만 해도 C#의 점유율이 크게 낮았다. 전문가들에게는 C++, 초보자들에게는 VB 6.0에게 밀렸기 때문이다. 하지만 2010년 이후로는 C++의 점유율이 서서히 낮아지고 있는 반면 C#의 점유율은 크게 높아졌다. C#은 강력한 reflection 구조를 갖고 있기 때문에 인텔리센스(자동완성)를 언어 차원에서 지원하므로, Visual Studio 2002~2005 버전을 써 본 사람은 C#과 C++의 인텔리센스 기능이 얼마나 차이가 났는지 기억할 것이다.[33]

언어적 특성으로 따지면 경쟁관계에 있는 언어는 Java라고 할 수 있는데, 처음 만들어질 때부터 Java를 많이 참고했으며 Java의 태생적 문제를 상당히 해결하고 유용한 기능이 더해졌다. 하지만 이것이 시장성으로 이어지지는 않고 있는데, 많은 솔루션들이 웹으로 컨버전되고 있는 시대적 특성 때문에 웹이 아닌 데스크톱 애플리케이션 분야의 시장이 줄어들고 있기 때문이다. C#도 ASP.NET이라는 웹 언어가 있기는 하지만, Java+ Spring에 크게 밀리는 상황[34]으로 점유율이 상당히 낮다. 특히 .NET Core가 나오기 전까지는 서버 OS가 많은 로열티를 발생시키는 MS Windows로 제한되었다는 점이 낮은 점유율에 크게 일조하였다. 하드웨어 제어나 공장 등 웹으로의 전환이 불가능에 가까운 환경에서는 어느 정도 경쟁력이 있긴 하지만, 닷넷 프레임워크 자체가 워낙 거대한 탓에 잘 선택되지 않는다. 그래도 최근에는 그러한 장비들의 환경 역시 성능이 많이 올라와서 부담이 덜어지고 있다는 것이 그나마 희망이긴 한데, 이쪽은 워낙 구(舊)버전이 유지되는 특성이 강하다 보니 C++와의 경쟁이 쉽지 않다. 특히 한국에서는 유니티 게임 개발이 아닌 한 C#을 신규 프로젝트에 쓰는 기업을 찾기 힘들다.

7. 기타

  • 기본적으로 C언어 포인터 변수를 지원하지 않는다. 다만 unsafe 키워드를 사용하면 C언어 형태의 포인터 변수를 선언하고 사용할 수 있다. 또한 마샬링 계열에서의 사용이나, 윈도우 Handle 오브젝트를 제어하기 위한 IntPtr이라는 포인터 클래스가 선언되어 있다. 포인터 변수를 지원하지 않는 대신 ref, out 키워드를 사용하여 포인터와 유사하게 작업할 수 있다.
  • C언어로 만들어진 라이브러리 사용은 DllImport를 통해 사용 가능하다.[35] 그렇다고 ntoskrnl.exe의 함수를 쓰는 것은 불가능하다.
  • 웹 애플리케이션 개발용으로는 ASP.NET을 밀어주고 있다. 이는 Java의 JSP에 대응되는 것으로, 기본적인 사항은 거의 비슷하다. 기업에서 주로 쓰고 있으나, 윈도우 서버( 인터넷 정보 서비스)를 비롯한 각종 라이선스 비용 문제 등으로 JSP만큼 크게 활성화되지 못했다. 2014년의 .NET 오픈소스화 이후, macOS 리눅스에서도 돌아가는 오픈소스 구현체인 ASP.NET Core가 등장했지만 해외에서는 많이 사용하지만 국내에서는 흥하지 못하고 있다. JSP를 주로 쓰는 곳은 비교적 보수적인 SI나 관공서, 대기업 등이어서 ASP.NET으로 넘어갈 의향이 없고, 최신 기술에 민감한 회사들은 쉽고 간편하게 웹 애플리케이션을 만들 수 있는 Express Django, Ruby on Rails 등으로 넘어갔기 때문이다.
  • 또한 플래시의 대항마로 실버라이트를 야심차게 내놓았으나 대차게 망해 버렸다.[36] HTML5가 부상하면서, 안 그래도 불안하던 실버라이트의 입지는 사실상 끝나버렸다 봐도 과언이 아니다. MS는 망조가 든 실버라이트를 살리기 위해 Windows Phone 7의 개발 언어로 쓸 수 있게 하는 등 많은 노력을 기울였으나, 그 WP7이 망했다.(...) 현재는 HTML5에 대응하는 Blazor로 바뀌었다.
  • 모바일 크로스플랫폼 개발 환경으로 Xamarin을 밀어주고 있는데, 이 Xamarin 프레임워크의 기반 언어가 C#이다. 그러나 현재 모바일 시장에 대한 MS의 영향력은 제로에 가까워진 터라 그리 확산은 되지 못하고 있다. 모바일 플랫폼 시장을 양분하고 있는 구글의 차세대 모바일 앱 개발 프레임워크 Flutter와의 경쟁을 앞두고 있다는 것 또한 밝은 미래를 전망하기 어렵게 만드는 요소이다.
  • ECMA와 ISO/IEC 표준으로 지정된 언어이며 C# 6.0 버전부터는 해당되지 않는다.
  • 2012년 들어 처음으로 점유율에서 C++을 추월했다. 다만 C#이 성장한 것보다는 C++의 점유율이 많이 하락한 것으로 보인다. 한때는 넘사벽의 1, 2위( Java, C)의 위치에 닿을 가능성이 가장 높은 언어로 점쳐졌으나, C++이 다시 3위 자리를 탈환하고 그 다음 자리를 Python이 치고 들어오면서 성장세가 주춤하고 있다.
  • 마이크로소프트의 XBOX 개발용 간이(?) 플랫폼인 XNA에 사용되는 언어. C#에 비하면 VB.NET은 더 쉽고, VB.NET마저 싫다면 어도비 에어밖에 방법이 없다.
  • 유니티 엔진의 스크립트 언어[37]로도 쓰인다. 이쪽은 모노 기반. 최신 버전 설치시 GTK C#이 함께 설치된다. PS Vita의 공개용 게임 개발 툴[38]에도 사용된다.
  • C#의 전체적인 부분에 대한 튜토리얼 동영상.

8. 관련 문서



[1] (using) static 한정자 [2] 최상위 문 [3] 암시적 전역 using 지시문 [4] 2011년부터 매년 개최되고 있는 Build의 전신이다. [5] 피아노로 치면 첫 번째 검은 건반에 해당한다. [6] 미국 스탠퍼드 대학의 모 교수가 컴파일러 강의를 위해 만든 언어이다. [7] 제네릭, 파셜(partial. 한 클래스를 여러 파일로 나눌 수 있는 기능) 타입, 열거자(iterator), nullable, 속성 멤버, 정적 클래스, 대리자(delegate) 추가. [8] 암시적 형식의 로컬변수(var), 객체 및 컬렉션 초기자, 자동구현 속성(get; set; 만으로 getter/setter 메소드가 구현되는 편의 기능), 익명 타입, 확장 메소드(기존 클래스에 확장되는 메소드로, 지정 타입에 메소드처럼 사용은 가능하나 해당 타입의 접근 제한된 멤버는 접근 불가능), 질의 표현식(흔히 아는 Linq의 시초), 람다 식, 표현식 구조, 파셜 메소드 추가. [9] 동적 바인딩(dynamic, 초기화 후에도 다른 타입으로 값을 할당할 수 있는 특징이 있다), 이름있는 선택적 메소드 인자(arguments) 추가. [10] 비동기 메소드(async/await), 호출 정보 특성 추가. [11] Roslyn 기반의 동적 컴파일러, 네임스페이스 정의란에 정적 타입 별칭 정의, 예외 필터, 비동기 try/catch/finally 구문, 자동구현 속성 할당, 읽기 전용 속성 기본값 할당, 멤버에 표현식 지원, 계층형 null 체크, 치환형 문자열 식, nameof 식(주로 멤버 및 타입 등 정의된 명칭을 정확하게 문자열로 표현하는 식), Dictionary 초기자 추가. [12] 추가된 것도 있고 아직 나오지 않은 것도 있지만 일단 예정된 기능으로는 이진값 할당(0b00100 식으로 초기화), 수 구분자(사람이 구분 가능하도록 수를 언더바(_)로 구분되며 컴파일 시 무시된다), 지역 함수(메소드 구문 내 함수 정의 및 사용 가능), switch 문에 타입 구분 추가, 참조형 리턴(return), 튜플 식(4.0부터 추가되었으며 이번 튜플은 단순한 타입이 아닌 식으로 제공된다), out var(기존에는 out 인자에 할당 전 별도로 변수를 선언해야 했으며, 여기서는 메소드 호출 내에 바로 선언이 가능하다), 패턴 매칭, 레코드 타입(단순한 getter/setter 클래스로 간결하게 정의 가능), await 비동기 구문 범용성 강화 기능 추가. [13] async main, 기본 리터럴 표현식, 인퍼드 튜플 엘리먼트 네임 지원. [14] 값 유형을 갖는 참조 시멘틱, 숫자 리터럴의 밑줄, private와 protected 접근 한정자 지원. [15] 고정된 필드 접근, 패턴을 지원하는 모든 유형의 고정 명령문 사용, 참조 지역 변수의 재할당, 추가 제네릭 제약 조건 사용, 스택 배열 배열에 이니셜 라이저 사용 지원. [16] Null 가능한 참조 유형, async 스트림 지원, Index 타입 추가, Range 타입 추가, 인터페이스 멤버의 디폴트 구현, 재귀 패턴 허용, 표현식 전환 지원, 타겟 타입의 새로운 표현식 지원. [17] 레코드 형식 도입, Init 전용 setter 추가, 최상위 문 지원 [18] 설계 철학부터가 차이가 크다. 메모리 직접 관리를 배제하는 Java/C#과 메모리를 수동으로 관리하는 C/C++는 아예 다른 세계의 언어라고 보면 된다. [19] 마이크로소프트에서 공식적으로 지원하는 것은 아니다. [20] .NET CORE와 .NET5 [21] .NET NANO. [22] 특히 macOS상에서는 여타 GTK# 개발 프로그램처럼 한글 입력에 문제가 있어 국내 개발자들의 불편을 사고 있다. [23] 관련 문서. [24] 원래의 개발사는 노벨 사(社)이었다. [25] 사실 Xamarin Studio를 MS가 사들인 뒤 UI 디자인과 이름만 바꾼 것이다. [26] 여기서 윈도우(운영체제 이름이 아닌 '창'을 의미)는 창 뿐만 아니라 컨트롤도 CreateWindow 함수에 의해 만들어진 또 하나의 '윈도우'이다. 하지만 WPF는 CreateWindow를 창에만 사용하고 컨트롤은 DirectX으로 직접 그리기 때문에 WPF의 컨트롤은 윈도우가 아니다. 따라서 Spy++에서 WPF 프로그램은 창만 보이고 컨트롤은 나오지 않는 이유다. [27] 사실 WPF에서도 코드로도 UI를 만들 수 있다. WPF는 XAML 내용을 해석하여 UI 코드를 만드는 것이기 때문이다. [28] 물론 블렌드에서는 코드를 짜고, 컴파일 및 실행이 가능하다. 그저 디자인에 불필요한 기능들을 제거한 것 뿐이다. [29] Windows Forms는 C# 하나만을 사용하는 반면, WPF는 XAML이라는 XML 기반의 마크업 언어로 UI를 작성하기 때문이다. 애니메이션도 역시 XAML로 작성한다. [30] JetBrains 사에서 만든 .NET 통합 개발 환경이다. 게임 아니다크로스플랫폼을 지원하지만 유료이며, 학생 인증을 받으면 무료 사용이 가능하다. [31] VS Code는 IDE가 아니지만, 각종 플러그인 설치를 통해 IDE에 근접한 환경을 구축할 수 있다. [32] 언어 디자이너인 Anders Hejlsberg가 뛰어난 개발 생산성을 자랑하는 델파이 개발환경에서 좋은 점만을 골라서 가져왔다. [33] 개발툴 수준에서 C#을 얼마나 밀어주는지는 단순히 위저드만 봐도 차이가 난다. 단위 테스트를 만들 때 C#의 위저드는 클릭 몇 번이면 끝나지만 C++은... 아무리 언어의 기본적 차이가 있다고 치더라도 Google의 GTest와 비교해보면 MS의 C++ 지원은 업무태만 수준이다. [34] Spring이 전자정부표준프레임워크로 지정된 국내 한정. 북미에서는 Spring으로 개발된 서비스의 수보다 ASP.NET으로 개발된 서비스의 수가 훨씬 많다. 또한 신규 개발의 경우 Spring 프레임워크를 이용하는 경우는 아예 없다고 봐도 무방하다. [35] 이 함수는 Windows API 사용에도 쓰인다. [36] 사실 웹 UI 시장에서 실버라이트의 출시가 늦은 편은 아니었다. 하지만 문제는 동시에 출발한 Flex가 웹계의 MS 취급을 받던 Adobe의 물건이었다는 사실. [37] 다만 유니티 엔진 자체의 런타임은 C++로 돌아간다. 그래서 C#을 DLL로 한 번 번역하고, 이를 다시 C++로 번역하는 2중 컴파일을 거치기 때문에 퍼포먼스의 제약이 있다. [38] 서드파티에서 사용하는 정식 툴이 아니라 PSN 마켓용 개발 툴을 말한다.