"C샵"의 두 판 사이의 차이
kimminsung5 (토론 | 기여) (→Java와의 관계) |
(→자바와의 관계) |
||
(사용자 8명의 중간 판 27개는 보이지 않습니다) | |||
1번째 줄: | 1번째 줄: | ||
+ | [[파일:C샵 로고.png|썸네일|200픽셀|'''C샵'''(C sharp)]] | ||
+ | [[파일:C샵 글자.png|썸네일|300픽셀|'''C샵'''(C sharp)]] | ||
+ | |||
[[파일:네오 글자.png|썸네일|300픽셀|'''[[네오]]'''(NEO)]] | [[파일:네오 글자.png|썸네일|300픽셀|'''[[네오]]'''(NEO)]] | ||
[[파일:스트라티스 글자.png|썸네일|300픽셀|'''[[스트라티스]]'''(Stratis)]] | [[파일:스트라티스 글자.png|썸네일|300픽셀|'''[[스트라티스]]'''(Stratis)]] | ||
− | '''C#'''(C sharp)은 [[마이크로소프트]]의 [[닷넷]](.NET) 플랫폼에서 작업할 수 있도록 기존 [[C++]]을 개량한 [[객체 지향 프로그래밍]] 언어이다. 비주얼 C#을 간략히 C#이라고 부르는 경우도 있다. '''씨샵'''이라고 읽는다. | + | '''C#'''(C sharp)은 [[마이크로소프트]]의 [[닷넷]](.NET) 플랫폼에서 작업할 수 있도록 기존 [[C++]]을 개량한 [[객체 지향 프로그래밍]] 언어이다. 비주얼 C#을 간략히 C#이라고 부르는 경우도 있다. '''씨샵'''이라고 읽는다. 중국 최초의 [[암호화폐]]인 [[네오]](NEO)는 C# 언어로 개발되었다. [[스트라티스]]도 C# 언어로 개발되었다. |
− | |||
− | 중국 최초의 [[암호화폐]]인 [[네오]](NEO)는 C# 언어로 개발되었다. [[스트라티스]]도 C# 언어로 개발되었다. | ||
== 개요 == | == 개요 == | ||
− | 2000년 7월에 개최되었던 Professional Developers Conference(PDC)에서 .NET 프로젝트와 함께 발표된 | + | 2000년 7월에 개최되었던 Professional Developers Conference(PDC)에서 [[닷넷]](.NET) 프로젝트와 함께 발표된 객체 지향 프로그래밍 언어이다. 한국어로 쓸 때는 '씨샵' 또는 '씨샾'이라고 쓴다. [[마이크로소프트]]의 [[앤더스 헬스버그]](Anders Hejlsberg)에 의해 고안되었으며, 1983년에 등장한 [[C++]]와 1995년에 등장한 [[자바]](Java)에서 강한 영향을 받았다. C#은 자바의 단점을 보완하고 대체할 수 있는 언어이며, [[컴포넌트]] 지향 프로그래밍 언어이다. |
== 역사 == | == 역사 == | ||
− | 닷넷 프레임워크를 개발하던 시절 클래스 [[라이브러리]]는 SMC(Simple Manages C)라 불리는 관리 코드(managed code)를 사용했었다. 1999년 1월, 아르네스 하일스베르가 이끄는 팀이 새로운 언어인 Cool(C-like Object Oriented Language)을 개발했다. [[마이크로소프트]]는 언어의 최종 이름을 Cool로 유지할지도 고려해봤지만 상표 문제로 인해 이뤄지지 않았다. 2000년 7월 PDC에서 [[닷넷]] 프로젝트가 발표될 즈음 Cool의 이름은 C#으로 정해졌고 클래스 [[라이브러리]]와 ASP.NET 런타임은 C#으로 옮겨갔다. C#은 ISO 소위원회 JTC 1/SC 22에 ISO/IEC 23270:2003으로 제출되었으나 철회 후 ISO/IEC 23270:2006으로 등록되었다.<ref>나무위키, 〈[https://namu.wiki/w/C%23 C#]〉 , 《나무위키》 , 2019-06-26</ref> | + | 닷넷 프레임워크를 개발하던 시절 클래스 [[라이브러리]]는 SMC(Simple Manages C)라 불리는 관리 코드(managed code)를 사용했었다. 1999년 1월, 아르네스 하일스베르가 이끄는 팀이 새로운 언어인 Cool(C-like Object Oriented Language)을 개발했다. [[마이크로소프트]]는 언어의 최종 이름을 Cool로 유지할지도 고려해봤지만 상표 문제로 인해 이뤄지지 않았다. 2000년 7월 PDC에서 [[닷넷]] 프로젝트가 발표될 즈음 Cool의 이름은 C#으로 정해졌고 클래스 [[라이브러리]]와 ASP.NET 런타임은 C#으로 옮겨갔다. C#은 ISO 소위원회 JTC 1/SC 22에 ISO/IEC 23270:2003으로 제출되었으나 철회 후 ISO/IEC 23270:2006으로 등록되었다.<ref name="나무위키">나무위키, 〈[https://namu.wiki/w/C%23 C#]〉, 《나무위키》, 2019-06-26</ref> |
== 닷넷 프레임워크 == | == 닷넷 프레임워크 == | ||
− | 닷넷 | + | [[닷넷 프레임워크]](.NET framework)는 [[컴포넌트]] 기반으로 [[소프트웨어]]를 개발하기 위한 [[마이크로소프트]]의 차세대 플랫폼이다. [[닷넷]]은 [[애플리케이션]] [[소프트웨어]]를 위한 runtime service 측면에서 근본적으로 진보했다. [[닷넷]]은 또한 [[애플리케이션]] 개발이 [[하드웨어]], [[운영체제]], 언어 컴파일러의 종류로부터 자유롭게 만들어준다.닷넷 프레임워크는 2001년 처음 비쥬얼스튜디오 [[닷넷]]과 함께 1.0 정식 버전이 발표되었다. 원래 닷넷 프레임워크는 여러 언어(Visual Basic, J#, C++)를 지원하며 다양한 OS 플랫폼에 적용하기 위해 나온 것이다. 닷넷 프레임워크의 특징으로는 C/C++ 등 절차지향 언어에서 포인터 사용 및 해제 등 사용자가 직접 해오던 메모리 관리 작업을 GC(Garbage Collection)라는 가비지 컬렉션을 통해서 자동으로 하게 되어 매우 편리해졌다. 대표적인 예로, [[자바]], [[액션스크립트]](Action Script)가 있다.<ref>Workspage, 〈[https://workspage.tistory.com/43 재미없는 C#의 역사]〉, 《Workspage.Net》, 2013-10-04</ref> |
== 특징 == | == 특징 == | ||
− | === | + | === 자바와의 관계 === |
− | [[Java]] | + | [[자바]](Java)가 [[자바가상머신]](JVM)이 필요하듯 C#은 [[닷넷]] [[프레임워크]]가 필요하다. 닷넷 프레임워크 대신 비교적 작은 사이즈의 가상머신에 올려서 실행시키는 방법도 있다. 성능 때문에 많은 포화를 맞았고 C#이 상대적으로 큰 논란 없이 입성하기는 했다. 일단은 자바보다 차세대 언어이므로 자바보다 성능적으로 우위인 부분이 많긴 하지만 (비슷한 코드에서 평균적으로 10~20% 정도 빠르다.) 여전히 C/C++보다는 느린 부분이 있는 것 또한 사실이다. 이는 가비지 컬렉션이 있는 언어의 고질적인 문제점이라 어쩔 수 없다. |
− | === 호환성 및 범용성 === | + | |
+ | === 호환성 및 범용성 === | ||
+ | 언어적으로는 [[자바]]와 유사하지만, [[마이크로소프트]]라는 특정 플랫폼에 강하게 묶여있다는 특성으로 [[애플]]의 [[오브젝티브-C]](Objective-C)와 자주 비교가 된다. TIOBE 기준 점유율 측면에서 한때 Objective-C가 C#보다 우위에 있기도 했지만, Objective-C는 Swift의 등장 때문에 점유율이 크게 내려가고 있어 2016년 4월 현재 C#이 Objective-C보다 크게 앞서고 있다. 다만 Swift가 큰 폭으로 오르는 중이다. 물론 모노 덕분에 Objective-C보다는 범용성이 훨씬 높다. 유니티 엔진의 기본 개발 언어이기도 하다. 크라이엔진도 결국 유니티 엔진에 익숙해진 개발자들을 끌어오기 위해 C# 지원을 시작했다. 언리얼 엔진도 마이크로소프트 소속 개발자들이 제작한 MonoUE라는 플러그인을 설치하면 C# 사용이 가능하다. C#으로 안드로이드와 iOS용 앱, macOS용 Cocoa 기반 프로그램을 개발할 수 있도록 해주는 Xamarin이라는 프레임워크가 있다. 원래 서드파티 상용 프레임워크였으나, MS에 인수되었고, 이후 Visual Studio 2015에 기본 탑재되었다. 비주얼 스튜디오의 확장 프로그램 개발에 쓰이는 언어이기도 하다. | ||
=== 모노 === | === 모노 === | ||
− | [[윈도우]] 이외의 운영체제에서도 C# 사용이 가능하도록 | + | [[윈도우]] 이외의 운영체제에서도 C# 사용이 가능하도록 모노라는 프로젝트가 진행 중이다. 아직 그다지 완전하다고 볼 수는 없다. MonoDevelop/Xamarin Studio IDE가 제공되어, 개발도 다른 [[플랫폼]]에서 할 수는 있지만 [[비주얼 스튜디오]]만큼의 편의성을 제공하지는 못한다. MS는 오랫동안 오픈소스 진영에 배타적인 태도를 보여 왔고, [[닷넷]]에 공개되지 않은 뭔가, 또는 MS에 특허가 있는 것을 넣어서 MS가 만들지 않은 프레임워크는 대부분의 기존 프로그램(.NET 프레임워크용으로 만든)이 잘 안 돌아가는 무용지물이 되거나, 나중에 특허 소송으로 프로젝트를 아예 중단시켜 버릴 가능성을 완전히 배제할 수 없었다. 이 때문에 [[리처드 스톨먼]] 등 여러 사람이 'C#과 모노를 써서는 안 된다'고 한 적도 있다. 결국 MS는 2006년 커뮤니티 공약이라는 것을 발표하면서 ECMA 표준에 의한 구현에 대해서는 특허권을 주장하지 않기로 했다. 하지만, 얼마 지나지 않아 모노의 주 구성 요소 대부분이 저 커뮤니티 공약의 적용 범위에 포함되지 않기 때문에 모노가 아직도 언제든지 특허 소송을 통해 중단될 수 있다는 것이 밝혀져 모노 위험 요소 설이 다시 부상하였다. 그러나 2010년대 이래 MS는 친 오픈소스 적인 행보를 보여, 2014년엔 [[닷넷]]을 오픈소스로 공개하였으며, MS가 모노 프로젝트의 주요 메인테이너인 Xamarin을 인수하면서 이러한 우려는 종식되었다. 그 후 MS가 Xamarin 인수 이후 사실상 프로젝트 자체가 MS로 넘어갔다. Git 기여자를 보면 [[마이크로소프트]] 개발자가 대다수다. 2015년 4월 29일에 배포된 Mono 4.0버전에서는 아예 닷넷의 오픈소스 플랫폼인 .NET Core가 적용되었다. 2017년 5월에 비주얼 스튜디오의 macOS 버전이 공개되어서, macOS에서도 정식으로 C# 개발을 할 수 있게 되었다. 자신이 유료 IDE에 돈을 지불할 의향이 있다면 JetBrains의 Rider라는 선택지가 있다. 자바용 [[IDE]]로 유명한 [[인텔리제이 아이디어]](IntelliJ IDEA)를 베이스로 하고 있어 리눅스를 포함한 크로스 플랫폼이 지원되고 완성도가 높으며, MonoDevelop보다 편리하고 다양한 기능을 제공한다. 또한 유니티 엔진과의 연동도 뛰어나다. |
− | === | + | |
− | [[마이크로소프트]]가 C#, VB, NET 등 모든 [[닷넷]] 프레임워크 기반 언어를 Windows, macOS, Linux 기반에서 돌아가도록 만든 오픈소스 | + | === 닷넷 코어 === |
+ | [[마이크로소프트]]가 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"이다. | ||
+ | |||
=== Windows Forms vs WPF === | === Windows Forms vs WPF === | ||
− | * 렌더링 : Windows Forms는 CPU 렌더링 방식(Windows API)이며 연산량이 적고 | + | * 렌더링 : Windows Forms는 CPU 렌더링 방식(Windows API)이며 연산량이 적고 [[메모리]]를 많이 먹지 않아서 비교적 가벼운 편이다. 다만 애니메이션 구현이 어렵고 기본적으로 동기 방식이다. |
WPF는 DirectX 렌더링 방식이기 때문에 연산량이 많고(백터 방식), Windows Form과 다르게 무겁고, 메모리를 많이 먹는 편이지만 애니메이션 구현이 쉬우며 기본적으로 비동기 방식이다. | WPF는 DirectX 렌더링 방식이기 때문에 연산량이 많고(백터 방식), Windows Form과 다르게 무겁고, 메모리를 많이 먹는 편이지만 애니메이션 구현이 쉬우며 기본적으로 비동기 방식이다. | ||
* 컨트롤과 코드 비하인드 : Windows Forms는 초보자가 사용하기 좋으나 디자인 패턴이 제한적이고 바인딩에 대하여 추가적인 리소스가 있는 편이다. WPF는 모던한 디자인 패턴이 가능하고, 바인딩을 염두에 둬 설계되었지만 초보자가 사용하기에는 어렵다. | * 컨트롤과 코드 비하인드 : Windows Forms는 초보자가 사용하기 좋으나 디자인 패턴이 제한적이고 바인딩에 대하여 추가적인 리소스가 있는 편이다. WPF는 모던한 디자인 패턴이 가능하고, 바인딩을 염두에 둬 설계되었지만 초보자가 사용하기에는 어렵다. | ||
* 그래픽 : Windows Forms는 [[CPU]] 렌더링이 기본이며 GPU 렌더링이 가능하나 어렵고, 스레드 관리가 귀찮음을 유발하며 프레임 개념에 접근이 어렵다. WPF는 GPU로 렌더링이 가능하고 스레드 관리와 프레임에 대한 접근이 쉬운 편이다. | * 그래픽 : Windows Forms는 [[CPU]] 렌더링이 기본이며 GPU 렌더링이 가능하나 어렵고, 스레드 관리가 귀찮음을 유발하며 프레임 개념에 접근이 어렵다. WPF는 GPU로 렌더링이 가능하고 스레드 관리와 프레임에 대한 접근이 쉬운 편이다. | ||
− | * 커뮤니티 크기 : Windows Forms는 출시된 후 오랜 시간이 지났기 때문에 자료가 많고 외부 컨트롤 | + | * 커뮤니티 크기 : Windows Forms는 출시된 후 오랜 시간이 지났기 때문에 자료가 많고 외부 컨트롤 [[라이브러리]]가 많다. 참고로 대부분의 외부 렌더링 라이브러리의 경우 GDI를 통해서 그리는 경우가 있는데, 이 경우 WPF와의 성능 차이가 상당히 난다. WPF는 최근에 나온 기술이라 자료가 적고 현재 외부 컨트롤 라이브러리가 많아지고 있다. 다만 일부 외부 렌더링 된 컨트롤을 가져오는 경우 성능이 떨어질 수 있다. |
− | * 엔터프라이즈 레벨 : Windows Forms는 Windows Forms로 만든 프로그램의 크기와 부하가 일정하게 커지며 퍼포먼스 개선이 힘든 편이다. 따라서 디자이너와의 협업이 거의 불가능하다. WPF는 WPF로 만든 프로그램의 크기가 커져도 부하가 많이 증가하지 않는다. 프레임 세팅이나 다른 렌더링 설정으로 퍼포먼스 개선이 어느 정도 가능하다. 그리고 디자이너와 분리된 상태에서의 협업이 가능하다.<ref> | + | * 엔터프라이즈 레벨 : Windows Forms는 Windows Forms로 만든 프로그램의 크기와 부하가 일정하게 커지며 퍼포먼스 개선이 힘든 편이다. 따라서 디자이너와의 협업이 거의 불가능하다. WPF는 WPF로 만든 프로그램의 크기가 커져도 부하가 많이 증가하지 않는다. 프레임 세팅이나 다른 렌더링 설정으로 퍼포먼스 개선이 어느 정도 가능하다. 그리고 디자이너와 분리된 상태에서의 협업이 가능하다.<ref name="나무위키"></ref> |
== 장점 == | == 장점 == | ||
− | C#은 현대적이고 혁신적인 언어로 .NET 플랫폼 기반의 | + | C#은 현대적이고 혁신적인 언어로 .NET 플랫폼 기반의 [[소프트웨어]]를 개발하는 최고의 도구이다. 특히 C#은 뛰어난 생산성과 뛰어난 성능을 갖추고 있는 주목받는 차세대 언어이다. C#은 네트워크 환경에서 개발자의 생산성을 증대시키고 프로그래머가 작성해야 하는 코드의 양을 줄이는 기술이 포함되어 있다. |
− | * '''분산 환경에 적합한 언어''' : ASP.NET, XML.NET, 모바일 프로그램 지원 등의 프로그램을 | + | * '''분산 환경에 적합한 언어''' : ASP.NET, XML.NET, 모바일 프로그램 지원 등의 프로그램을 이른 시간 안에 개발할 수 있다. 특히 ASP.NET관련 프로그램 개발에 뛰어난 생산성과 성능을 발휘한다. |
− | * '''구조 중립적인 언어''' : C#을 이용해 개발된 프로그램은 다양한 환경의 | + | * '''구조 중립적인 언어''' : C#을 이용해 개발된 프로그램은 다양한 환경의 [[운영체제]]에서 실행할 수 있다. |
− | * '''뛰어난 생산성''' : C#은 비주얼 스튜디오.NET을 이용해 뛰어난 생산성을 제공한다. 비주얼베이직의 생산성과 C++의 성능을 동시에 제공하는 C#은 개발 시간을 크게 | + | * '''뛰어난 생산성''' : C#은 비주얼 스튜디오.NET을 이용해 뛰어난 생산성을 제공한다. 비주얼베이직의 생산성과 C++의 성능을 동시에 제공하는 C#은 개발 시간을 크게 단축한다. |
− | * '''강력한 디버깅 기능''' : ASP.NET, 모바일 프로그래밍 등 기존 언어에서 디버깅 제공이 곤란했던 분야에 대해 뛰어난 디버깅 기능을 제공한다.<ref>사용보고서/어바웃 IT, 〈[https://sssoh.tistory.com/6 프로그래밍 언어의 종류와 특징]〉 , 《김씨의 어떤 것과, 모든 것들》 , 2012-01-17</ref> | + | * '''강력한 디버깅 기능''' : ASP.NET, 모바일 프로그래밍 등 기존 언어에서 [[디버깅]] 제공이 곤란했던 분야에 대해 뛰어난 디버깅 기능을 제공한다.<ref name="IT">사용보고서/어바웃 IT, 〈[https://sssoh.tistory.com/6 프로그래밍 언어의 종류와 특징]〉, 《김씨의 어떤 것과, 모든 것들》, 2012-01-17</ref> |
− | |||
== 문법 == | == 문법 == | ||
− | C#의 기본 문법은 [[C]], [[C++]], [[ | + | C#의 기본 문법은 [[C]], [[C++]], [[자바]] 등 C 스타일 언어와 유사하다. |
* 세미콜론이 선언문의 끝을 나타낸다. | * 세미콜론이 선언문의 끝을 나타낸다. | ||
* 중괄호로 선언문을 묶는다. 보통 선언문은 메소드(함수)로, 메소드는 클래스로, 클래스는 네임스페이스로 묶인다. | * 중괄호로 선언문을 묶는다. 보통 선언문은 메소드(함수)로, 메소드는 클래스로, 클래스는 네임스페이스로 묶인다. | ||
* 변수에 등호를 사용해서 값을 대입하고, 두 개의 등호("==")를 사용해 비교한다. | * 변수에 등호를 사용해서 값을 대입하고, 두 개의 등호("==")를 사용해 비교한다. | ||
− | * 대괄호는 배열의 선언 및 인덱스 접근 모두에 사용된다.<ref>위키백과, 〈[https://ko.wikipedia.org/wiki/C_%EC%83%A4%ED%94%84 C 샤프]〉 , 《위키백과》 , 2019-05-10</ref> | + | * 대괄호는 배열의 선언 및 인덱스 접근 모두에 사용된다.<ref>위키백과, 〈[https://ko.wikipedia.org/wiki/C_%EC%83%A4%ED%94%84 C 샤프]〉, 《위키백과》, 2019-05-10</ref> |
== 활용 분야 == | == 활용 분야 == | ||
− | 현재 C#은 다양한 용도로 사용되고 있지는 못한다. C#은 닷넷 프레임워크가 활성화 되지 않아 아직까지 많이 사용되지 않는 학습용 언어이다. C#이 작동하기 위해서는 CLR 엔진과 닷넷 프레임워크가 필요한데 현재 [[닷넷]]을 | + | 현재 C#은 다양한 용도로 사용되고 있지는 못한다. C#은 닷넷 프레임워크가 활성화 되지 않아 아직까지 많이 사용되지 않는 학습용 언어이다. C#이 작동하기 위해서는 CLR 엔진과 닷넷 프레임워크가 필요한데 현재 [[닷넷]]을 지원하는 운영체제가 윈도우 2003 밖에 없기 때문에 C#을 이용해 개발된 다양한 프로그램을 접하기 위해서는 시간이 더 필요하다. C#은 자바가 사용하는 부분과 비슷한 영역에서 사용될 수 있다. 먼저 윈도우용 [[애플리케이션]]을 작성할 수 있으며, [[데이터베이스]] 프로그램, 웹 서버 프로그램, XML 서비스, 무선 인터넷 프로그램 등을 작성할 수 있다. C#은 델파이 개발에 참여한 개발자들이 주축이 되어 개발되었다. 따라서 델파이에 포함된 중용한 개념이 C#에 많이 포함되어 있다. 최근 C# 언어의 기본 설계에 큰 영향을 준 델파이 언어도 닷넷 프레임워크를 지원하기 시작했다. 또한 델파이를 개발한 볼랜드에서는 C#빌더라는 C# 개발도구를 출시하였다.<ref name="IT"></ref> |
− | |||
{{각주}} | {{각주}} | ||
== 참고자료 == | == 참고자료 == | ||
− | * 나무위키, 〈[https://namu.wiki/w/C%23 C#]〉 , 《나무위키》 , 2019-06-26 | + | * 나무위키, 〈[https://namu.wiki/w/C%23 C#]〉, 《나무위키》, 2019-06-26 |
− | * Workspage, 〈[https://workspage.tistory.com/43 재미없는 C#의 역사]〉 , 《Workspage.Net》 , 2013-10-04 | + | * Workspage, 〈[https://workspage.tistory.com/43 재미없는 C#의 역사]〉, 《Workspage.Net》, 2013-10-04 |
− | + | * 사용보고서/어바웃 IT, 〈[https://sssoh.tistory.com/6 프로그래밍 언어의 종류와 특징]〉, 《김씨의 어떤 것과, 모든 것들》, 2012-01-17 | |
− | * 사용보고서/어바웃 IT, 〈[https://sssoh.tistory.com/6 프로그래밍 언어의 종류와 특징]〉 , 《김씨의 어떤 것과, 모든 것들》 , 2012-01-17 | + | * 위키백과, 〈[https://ko.wikipedia.org/wiki/C_%EC%83%A4%ED%94%84 C 샤프]〉, 《위키백과》 |
− | * 위키백과, 〈[https://ko.wikipedia.org/wiki/C_%EC%83%A4%ED%94%84 C 샤프]〉 , 《위키백과》 | ||
== 같이 보기 == | == 같이 보기 == | ||
67번째 줄: | 69번째 줄: | ||
* [[스트라티스]] | * [[스트라티스]] | ||
− | {{프로그래밍|검토 필요}} | + | {{프로그래밍 언어|검토 필요}} |
− | |||
− |
2022년 4월 9일 (토) 03:46 기준 최신판
C#(C sharp)은 마이크로소프트의 닷넷(.NET) 플랫폼에서 작업할 수 있도록 기존 C++을 개량한 객체 지향 프로그래밍 언어이다. 비주얼 C#을 간략히 C#이라고 부르는 경우도 있다. 씨샵이라고 읽는다. 중국 최초의 암호화폐인 네오(NEO)는 C# 언어로 개발되었다. 스트라티스도 C# 언어로 개발되었다.
목차
개요[편집]
2000년 7월에 개최되었던 Professional Developers Conference(PDC)에서 닷넷(.NET) 프로젝트와 함께 발표된 객체 지향 프로그래밍 언어이다. 한국어로 쓸 때는 '씨샵' 또는 '씨샾'이라고 쓴다. 마이크로소프트의 앤더스 헬스버그(Anders Hejlsberg)에 의해 고안되었으며, 1983년에 등장한 C++와 1995년에 등장한 자바(Java)에서 강한 영향을 받았다. C#은 자바의 단점을 보완하고 대체할 수 있는 언어이며, 컴포넌트 지향 프로그래밍 언어이다.
역사[편집]
닷넷 프레임워크를 개발하던 시절 클래스 라이브러리는 SMC(Simple Manages C)라 불리는 관리 코드(managed code)를 사용했었다. 1999년 1월, 아르네스 하일스베르가 이끄는 팀이 새로운 언어인 Cool(C-like Object Oriented Language)을 개발했다. 마이크로소프트는 언어의 최종 이름을 Cool로 유지할지도 고려해봤지만 상표 문제로 인해 이뤄지지 않았다. 2000년 7월 PDC에서 닷넷 프로젝트가 발표될 즈음 Cool의 이름은 C#으로 정해졌고 클래스 라이브러리와 ASP.NET 런타임은 C#으로 옮겨갔다. C#은 ISO 소위원회 JTC 1/SC 22에 ISO/IEC 23270:2003으로 제출되었으나 철회 후 ISO/IEC 23270:2006으로 등록되었다.[1]
닷넷 프레임워크[편집]
닷넷 프레임워크(.NET framework)는 컴포넌트 기반으로 소프트웨어를 개발하기 위한 마이크로소프트의 차세대 플랫폼이다. 닷넷은 애플리케이션 소프트웨어를 위한 runtime service 측면에서 근본적으로 진보했다. 닷넷은 또한 애플리케이션 개발이 하드웨어, 운영체제, 언어 컴파일러의 종류로부터 자유롭게 만들어준다.닷넷 프레임워크는 2001년 처음 비쥬얼스튜디오 닷넷과 함께 1.0 정식 버전이 발표되었다. 원래 닷넷 프레임워크는 여러 언어(Visual Basic, J#, C++)를 지원하며 다양한 OS 플랫폼에 적용하기 위해 나온 것이다. 닷넷 프레임워크의 특징으로는 C/C++ 등 절차지향 언어에서 포인터 사용 및 해제 등 사용자가 직접 해오던 메모리 관리 작업을 GC(Garbage Collection)라는 가비지 컬렉션을 통해서 자동으로 하게 되어 매우 편리해졌다. 대표적인 예로, 자바, 액션스크립트(Action Script)가 있다.[2]
특징[편집]
자바와의 관계[편집]
자바(Java)가 자바가상머신(JVM)이 필요하듯 C#은 닷넷 프레임워크가 필요하다. 닷넷 프레임워크 대신 비교적 작은 사이즈의 가상머신에 올려서 실행시키는 방법도 있다. 성능 때문에 많은 포화를 맞았고 C#이 상대적으로 큰 논란 없이 입성하기는 했다. 일단은 자바보다 차세대 언어이므로 자바보다 성능적으로 우위인 부분이 많긴 하지만 (비슷한 코드에서 평균적으로 10~20% 정도 빠르다.) 여전히 C/C++보다는 느린 부분이 있는 것 또한 사실이다. 이는 가비지 컬렉션이 있는 언어의 고질적인 문제점이라 어쩔 수 없다.
호환성 및 범용성[편집]
언어적으로는 자바와 유사하지만, 마이크로소프트라는 특정 플랫폼에 강하게 묶여있다는 특성으로 애플의 오브젝티브-C(Objective-C)와 자주 비교가 된다. TIOBE 기준 점유율 측면에서 한때 Objective-C가 C#보다 우위에 있기도 했지만, Objective-C는 Swift의 등장 때문에 점유율이 크게 내려가고 있어 2016년 4월 현재 C#이 Objective-C보다 크게 앞서고 있다. 다만 Swift가 큰 폭으로 오르는 중이다. 물론 모노 덕분에 Objective-C보다는 범용성이 훨씬 높다. 유니티 엔진의 기본 개발 언어이기도 하다. 크라이엔진도 결국 유니티 엔진에 익숙해진 개발자들을 끌어오기 위해 C# 지원을 시작했다. 언리얼 엔진도 마이크로소프트 소속 개발자들이 제작한 MonoUE라는 플러그인을 설치하면 C# 사용이 가능하다. C#으로 안드로이드와 iOS용 앱, macOS용 Cocoa 기반 프로그램을 개발할 수 있도록 해주는 Xamarin이라는 프레임워크가 있다. 원래 서드파티 상용 프레임워크였으나, MS에 인수되었고, 이후 Visual Studio 2015에 기본 탑재되었다. 비주얼 스튜디오의 확장 프로그램 개발에 쓰이는 언어이기도 하다.
모노[편집]
윈도우 이외의 운영체제에서도 C# 사용이 가능하도록 모노라는 프로젝트가 진행 중이다. 아직 그다지 완전하다고 볼 수는 없다. MonoDevelop/Xamarin Studio IDE가 제공되어, 개발도 다른 플랫폼에서 할 수는 있지만 비주얼 스튜디오만큼의 편의성을 제공하지는 못한다. MS는 오랫동안 오픈소스 진영에 배타적인 태도를 보여 왔고, 닷넷에 공개되지 않은 뭔가, 또는 MS에 특허가 있는 것을 넣어서 MS가 만들지 않은 프레임워크는 대부분의 기존 프로그램(.NET 프레임워크용으로 만든)이 잘 안 돌아가는 무용지물이 되거나, 나중에 특허 소송으로 프로젝트를 아예 중단시켜 버릴 가능성을 완전히 배제할 수 없었다. 이 때문에 리처드 스톨먼 등 여러 사람이 'C#과 모노를 써서는 안 된다'고 한 적도 있다. 결국 MS는 2006년 커뮤니티 공약이라는 것을 발표하면서 ECMA 표준에 의한 구현에 대해서는 특허권을 주장하지 않기로 했다. 하지만, 얼마 지나지 않아 모노의 주 구성 요소 대부분이 저 커뮤니티 공약의 적용 범위에 포함되지 않기 때문에 모노가 아직도 언제든지 특허 소송을 통해 중단될 수 있다는 것이 밝혀져 모노 위험 요소 설이 다시 부상하였다. 그러나 2010년대 이래 MS는 친 오픈소스 적인 행보를 보여, 2014년엔 닷넷을 오픈소스로 공개하였으며, MS가 모노 프로젝트의 주요 메인테이너인 Xamarin을 인수하면서 이러한 우려는 종식되었다. 그 후 MS가 Xamarin 인수 이후 사실상 프로젝트 자체가 MS로 넘어갔다. Git 기여자를 보면 마이크로소프트 개발자가 대다수다. 2015년 4월 29일에 배포된 Mono 4.0버전에서는 아예 닷넷의 오픈소스 플랫폼인 .NET Core가 적용되었다. 2017년 5월에 비주얼 스튜디오의 macOS 버전이 공개되어서, macOS에서도 정식으로 C# 개발을 할 수 있게 되었다. 자신이 유료 IDE에 돈을 지불할 의향이 있다면 JetBrains의 Rider라는 선택지가 있다. 자바용 IDE로 유명한 인텔리제이 아이디어(IntelliJ IDEA)를 베이스로 하고 있어 리눅스를 포함한 크로스 플랫폼이 지원되고 완성도가 높으며, MonoDevelop보다 편리하고 다양한 기능을 제공한다. 또한 유니티 엔진과의 연동도 뛰어나다.
닷넷 코어[편집]
마이크로소프트가 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"이다.
Windows Forms vs WPF[편집]
- 렌더링 : Windows Forms는 CPU 렌더링 방식(Windows API)이며 연산량이 적고 메모리를 많이 먹지 않아서 비교적 가벼운 편이다. 다만 애니메이션 구현이 어렵고 기본적으로 동기 방식이다.
WPF는 DirectX 렌더링 방식이기 때문에 연산량이 많고(백터 방식), Windows Form과 다르게 무겁고, 메모리를 많이 먹는 편이지만 애니메이션 구현이 쉬우며 기본적으로 비동기 방식이다.
- 컨트롤과 코드 비하인드 : Windows Forms는 초보자가 사용하기 좋으나 디자인 패턴이 제한적이고 바인딩에 대하여 추가적인 리소스가 있는 편이다. WPF는 모던한 디자인 패턴이 가능하고, 바인딩을 염두에 둬 설계되었지만 초보자가 사용하기에는 어렵다.
- 그래픽 : Windows Forms는 CPU 렌더링이 기본이며 GPU 렌더링이 가능하나 어렵고, 스레드 관리가 귀찮음을 유발하며 프레임 개념에 접근이 어렵다. WPF는 GPU로 렌더링이 가능하고 스레드 관리와 프레임에 대한 접근이 쉬운 편이다.
- 커뮤니티 크기 : Windows Forms는 출시된 후 오랜 시간이 지났기 때문에 자료가 많고 외부 컨트롤 라이브러리가 많다. 참고로 대부분의 외부 렌더링 라이브러리의 경우 GDI를 통해서 그리는 경우가 있는데, 이 경우 WPF와의 성능 차이가 상당히 난다. WPF는 최근에 나온 기술이라 자료가 적고 현재 외부 컨트롤 라이브러리가 많아지고 있다. 다만 일부 외부 렌더링 된 컨트롤을 가져오는 경우 성능이 떨어질 수 있다.
- 엔터프라이즈 레벨 : Windows Forms는 Windows Forms로 만든 프로그램의 크기와 부하가 일정하게 커지며 퍼포먼스 개선이 힘든 편이다. 따라서 디자이너와의 협업이 거의 불가능하다. WPF는 WPF로 만든 프로그램의 크기가 커져도 부하가 많이 증가하지 않는다. 프레임 세팅이나 다른 렌더링 설정으로 퍼포먼스 개선이 어느 정도 가능하다. 그리고 디자이너와 분리된 상태에서의 협업이 가능하다.[1]
장점[편집]
C#은 현대적이고 혁신적인 언어로 .NET 플랫폼 기반의 소프트웨어를 개발하는 최고의 도구이다. 특히 C#은 뛰어난 생산성과 뛰어난 성능을 갖추고 있는 주목받는 차세대 언어이다. C#은 네트워크 환경에서 개발자의 생산성을 증대시키고 프로그래머가 작성해야 하는 코드의 양을 줄이는 기술이 포함되어 있다.
- 분산 환경에 적합한 언어 : ASP.NET, XML.NET, 모바일 프로그램 지원 등의 프로그램을 이른 시간 안에 개발할 수 있다. 특히 ASP.NET관련 프로그램 개발에 뛰어난 생산성과 성능을 발휘한다.
- 구조 중립적인 언어 : C#을 이용해 개발된 프로그램은 다양한 환경의 운영체제에서 실행할 수 있다.
- 뛰어난 생산성 : C#은 비주얼 스튜디오.NET을 이용해 뛰어난 생산성을 제공한다. 비주얼베이직의 생산성과 C++의 성능을 동시에 제공하는 C#은 개발 시간을 크게 단축한다.
- 강력한 디버깅 기능 : ASP.NET, 모바일 프로그래밍 등 기존 언어에서 디버깅 제공이 곤란했던 분야에 대해 뛰어난 디버깅 기능을 제공한다.[3]
문법[편집]
C#의 기본 문법은 C, C++, 자바 등 C 스타일 언어와 유사하다.
- 세미콜론이 선언문의 끝을 나타낸다.
- 중괄호로 선언문을 묶는다. 보통 선언문은 메소드(함수)로, 메소드는 클래스로, 클래스는 네임스페이스로 묶인다.
- 변수에 등호를 사용해서 값을 대입하고, 두 개의 등호("==")를 사용해 비교한다.
- 대괄호는 배열의 선언 및 인덱스 접근 모두에 사용된다.[4]
활용 분야[편집]
현재 C#은 다양한 용도로 사용되고 있지는 못한다. C#은 닷넷 프레임워크가 활성화 되지 않아 아직까지 많이 사용되지 않는 학습용 언어이다. C#이 작동하기 위해서는 CLR 엔진과 닷넷 프레임워크가 필요한데 현재 닷넷을 지원하는 운영체제가 윈도우 2003 밖에 없기 때문에 C#을 이용해 개발된 다양한 프로그램을 접하기 위해서는 시간이 더 필요하다. C#은 자바가 사용하는 부분과 비슷한 영역에서 사용될 수 있다. 먼저 윈도우용 애플리케이션을 작성할 수 있으며, 데이터베이스 프로그램, 웹 서버 프로그램, XML 서비스, 무선 인터넷 프로그램 등을 작성할 수 있다. C#은 델파이 개발에 참여한 개발자들이 주축이 되어 개발되었다. 따라서 델파이에 포함된 중용한 개념이 C#에 많이 포함되어 있다. 최근 C# 언어의 기본 설계에 큰 영향을 준 델파이 언어도 닷넷 프레임워크를 지원하기 시작했다. 또한 델파이를 개발한 볼랜드에서는 C#빌더라는 C# 개발도구를 출시하였다.[3]
각주[편집]
- ↑ 1.0 1.1 나무위키, 〈C#〉, 《나무위키》, 2019-06-26
- ↑ Workspage, 〈재미없는 C#의 역사〉, 《Workspage.Net》, 2013-10-04
- ↑ 3.0 3.1 사용보고서/어바웃 IT, 〈프로그래밍 언어의 종류와 특징〉, 《김씨의 어떤 것과, 모든 것들》, 2012-01-17
- ↑ 위키백과, 〈C 샤프〉, 《위키백과》, 2019-05-10
참고자료[편집]
- 나무위키, 〈C#〉, 《나무위키》, 2019-06-26
- Workspage, 〈재미없는 C#의 역사〉, 《Workspage.Net》, 2013-10-04
- 사용보고서/어바웃 IT, 〈프로그래밍 언어의 종류와 특징〉, 《김씨의 어떤 것과, 모든 것들》, 2012-01-17
- 위키백과, 〈C 샤프〉, 《위키백과》
같이 보기[편집]