최근 바뀜
통계
임의의 문서로
도움말
문서
토론
원본 보기
역사 보기
로그인
C샵 문서 원본 보기
내위키
←
C샵
이동:
둘러보기
,
검색
문서 편집 권한이 없습니다. 다음 이유를 확인해주세요:
요청한 명령은 다음 권한을 가진 사용자에게 제한됩니다:
사용자
.
문서의 원본을 보거나 복사할 수 있습니다.
<syntaxhighlight lang="c#"> using System; class MainClass { public static void Main (string[] args) { Console.WriteLine ("You're watching NeWiki."); } } </syntaxhighlight> C#<ref>미디어위키에서는 제목에 # 기호를 쓰면 표제어의 하부 섹션을 뜻하는 것으로 해석되기 때문에 표제어에 #를 쓰지 못한다. 그래서 표제어를 'C샵'으로 쓴 것. 표준 표기법으로는 C샤프가 맞지만 C샵이 워낙에 널리 퍼진지라...</ref> [[마이크로소프트]]에서 내놓은 프로그래밍 언어로, #의 의미는 두 가지가 있다. * 음악 기호로서 #은 반음 올린다(augmented, 증강)는 의미를 가지고 있다. 즉 [[C (프로그래밍 언어)|C]]를 증강시켰다는 의미를 가지고 있다. * #을 쪼개 보면 ++++가 된다. 즉 [[C++]]보다 더욱 더 진보된 언어라는 의미를 가지고 있다. 원래 [[MS]]는 [[자바]]를 [[윈도우]] 운영체제에서 돌릴 수 있는 J++이라는 것을 만든 적이 있었다. [[윈도우]] API에 접근해서 네이티브 프로그램을 만들 수 있는 기능을 지원했는데, 당시 소유권을 가지고 있던 [[선마이크로시스템즈]]에서는 [[자바]]의 플랫폼 독립이라는 특성을 훼손한 [[MS]]에게 소송을 걸어버렸고 결국 J++을 포기한 [[MS]]가 [[.NET 프레임워크]]를 내놓으면서 아예 새로 만든 것이 C#이다. [[자바]]의 단점을 여러 가지로 개선시켰기 때문에 프로그래밍 언어 자체로 보면 장점이 많다. 한편으로는 [[자바]] 이후의 객체지향 언어들이 [[자바]]의 특징을 많이 이어받았기 때문에 [[C++]]의 개념을 많이 받은 C#는 차이점을 보이는데, 예를 들면 [[자바]] 계열 언어는 클래스 메소드가 기본적으로 오버로딩을 할 수 있고 메소드를 정의할 때 final 키워드를 줘야 오버로딩을 막을 수 있는 것과는 반대로 C#는 [[C++]]처럼 오버로딩이 기본적으로는 안 되고 메소드에 virtual 키워드를 줘야 오버로딩을 할 수 있다. [[자바]] 프로그래머들에게는 미묘한 차이 때문에 헷갈리는 부분도 꽤 있지만 둘 다 알고 보면 [[C++]]를 조상으로 하고 있는지라 공통점이 훨씬 더 많아서 [[자바]] 프로그래머라면 C# 배우기가 어렵지 않고 그 반대도 마찬가지다. [[C++]] 프로그래머라면 좀 더 친숙한 부분이 많고, 특히 좀 더 편하게 프로그래밍 할 수 있다. 무엇보다도 [[가비지 컬렉션]] 기능을 기본 지원하므로 [[C++]] 프로그래머들을 가장 괴롭히는 메모리 할당/반환 문제에서 해방될 수 있다. 예를 들어 [[C++]]라면 new 키워드로 새로운 클래스 객체를 만들었다면 더 이상 사용하지 않을 때 delete로 이를 해제해 주어야 한다. 클래스 안에서 새로운 메모리 할당이 있었다면 이 역시 해제해 줘야 한다. 그래서 [[C++]]에서는 소멸자 활용이 무척 중요했다.<ref>다만 스마트 포인터 기능을 사용하면 delete를 사용하지 않아도 사용이 끝난 포인터가 해제되므로 한결 낫다.</ref> 반면 C#에서는 가비지 컬렉터가 알아서 해제해 주므로 뒷일 생각 안하고 객체를 마음껏 만들어도 된다.<ref>다만 파일이나 [[데이터베이스]] 연결과 같은 자원을 새로 받았을 때는 다 쓰고 나서 빨리 해제하는 문제를 생각해 줘야 한다. 나중에 처리될 수도 있지만 가비지 컬렉터가 그 정도까지는 못할 수도 있는 데다가 이들 자원에는 그 수가 제한되어 있으므로 빨리 소진되어 오류를 일으키는 원인이 되기 때문이다. C#에서는 using을 잘 사용하면 간편하게 처리할 수 있다.</ref> 반면 <del>만악의 근원인</del> 포인터 연산은 [[C++]]처럼 써먹을 수 있다. 다만 이 기능을 쓰려면 unsafe 키워드로 지정해 주고 /unsafe 옵션으로 컴파일 해야 한다. 옵션의 이름에서 알 수 있는 것처럼 포인터 연산은 unsafe, 즉 안전하지 않으므로 안 쓸 수 있다면 안 쓰는 게 당연히 좋다. unsafe 옵션을 써야 할 정도로 포인터 연산까지 필요한 프로그램이라면 아마도 C#보다는 결국은 C/C++를 쓰겠지만. [[MS]]라는 곳이 워낙에 [[오픈 소스]]에 대해 적대감이 많았고 [[MS]] 기술은 거의가 [[윈도우]]에서만 쓸 수 있었기 때문에 C# 역시 [[윈도우]] 전용 언어였다.<ref>정확히는 C#은 .[[NET 프레임워크]]에 묶여 있는 언어였고 [[.NET]]이 윈도우 전용이었기 때문이다.</ref> 이런 점에서는 [[애플]] 운영체에 묶여 있는 [[오브젝티브C]]나 [[스위프트]]와 비슷한 처지라 할 수 있다. 하지만 모노 프로젝트를 통해 [[.NET 프레임워크]]를 [[리눅스]]에서 쓸 수 있는 길이 열리면서 C#도 [[윈도우]] 감옥에서 벗어났고, 모노 프로젝트가 자마린으로 발전하면서 이제는 [[안드로이드]], [[iOS]], [[윈도우 모바일]]까지 같이 지원하는 언어가 되어서 새롭게 조명을 받고 있다. 게다가 최근 [[MS]]가 [[오픈 소스]]를 포용하고 적극 활용하는 쪽으로 정책을 180도 바꾸면서 원래 유료였던 자마린까지 무료는 물론이고 아예 오픈 소스로 풀어버렸기 때문에 더더욱 관심이 커지고 있는 상태다. 아직까지 모바일 크로스플랫폼 개발 언어로는 [[자바스크립트]]가 널리 쓰이고 있지만 [[자마린]]의 성장세도 무시할 수 없는 수준이었으나... [[리액트 네이티브]]에 [[Flutter]]까지 등장해서 많이 위축되긴 했다. <s>역시 MS는 모바일은 안 되나 봐...</s> 자세한 내용은 [[자마린]] 항목 참조. {{각주}} [[Category:프로그래밍 언어]]
이 문서에서 사용한 틀:
틀:각주
(
원본 보기
)
C샵
문서로 돌아갑니다.
도구
여기를 가리키는 문서
가리키는 글의 최근 바뀜
특수 문서 목록
문서 정보