Ebooks, Audobooks and Classical Music from Liber Liber
a b c d e f g h i j k l m n o p q r s t u v w x y z





Web - Amazon

We provide Linux to the World


We support WINRAR [What is this] - [Download .exe file(s) for Windows]

CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
SITEMAP
Audiobooks by Valerio Di Stefano: Single Download - Complete Download [TAR] [WIM] [ZIP] [RAR] - Alphabetical Download  [TAR] [WIM] [ZIP] [RAR] - Download Instructions

Make a donation: IBAN: IT36M0708677020000000008016 - BIC/SWIFT:  ICRAITRRU60 - VALERIO DI STEFANO or
Privacy Policy Cookie Policy Terms and Conditions
C 샤프 - 위키백과

C 샤프

위키백과 ― 우리 모두의 백과사전.

위키백과의 기술적인 한계로 인하여 다른 제목을 씁니다. 이 문서의 올바른 제목은 C#입니다.

C#(시 샤프)는 마이크로소프트에서 개발한 객체 지향 프로그래밍 언어로, 닷넷 프레임워크의 한 부분으로 만들어졌다. C++자바와 비슷한 문법을 가지고 있다.

목차

[편집] 언어 특징

C#은 닷넷 프로그램이 동작하는 닷넷 플랫폼을 가장 직접적으로 반영하고, 또한 닷넷 플랫폼에 강하게 의존하는 프로그래밍 언어이다. C#은 그 문법적인 특성이 자바와 상당히 유사하며 C#을 통하여 다룰 수 있는 닷넷 플랫폼의 기술들 조차도 자바를 염두에 둔 것이 많아서 자바와 가장 많이 비교되고 있다. 하지만 C#은 자바와 달리 불안전 코드(unsafe code, [1])와 같은 기술을 통하여 플랫폼 간 상호 운용성에 상당히 많은 노력을 기울이고 있다. C#의 기본 자료형은 닷넷의 객체 모델을 따르고 있고, 런타임 차원에서의 메모리 수거(garbage collection)가 되며 또한 클래스, 인터페이스, 위임, 예외와 같이 객체 지향 언어로서 가져야 할 모든 요소들이 포함되어있다.

[편집] 표준화 역사와 현재

2000년 8월에 마이크로소프트, 휴렛 팩커드, 인텔은 C#과 공용 언어 인프라스트럭처 (CLI)를 ECMA 국제 표준으로 등록하기 위한 작업을 준비하였다. 2001년 12월에 ECMA는 C# 언어를 ECMA-334 표준으로 발표하였고 2003년에는 ISO/IEC 23270 표준으로도 등록되었다. ECMA-334의 두번째 판은 2002년 12월에 발표되었다.

2005년 6월에 발표된 ECMA-334의 세번째 판은 닷넷 플랫폼 2.0에 관한 내용을 반영하고 있는데 부분 클래스, 익명 메서드, (NULL)을 대입할 수 있는 기본 자료형(nullable type), 제네릭 형식 등에 대한 내용을 포함하고 있다. 여기서 제네릭 형식은 새로 추가된 내용 중 가장 큰 비중을 차지하며 C++의 템플릿과 같은 형식 다형성을 위해 추가되었지만 그 내용은 서로 다르다. 2005년 7월에는 ECMA가 관련 표준 및 기술 리소스들을 ISO/IEC JTC 1에 latter's Fast-Track Process를 거쳐 제출하였는데 이 과정은 6개월에서 9개월 가량이 소요된다고 한다.

마이크로소프트는 이 세번째 판의 내용을 반영하는 닷넷 플랫폼 2.0과 비쥬얼 스튜디오 2005를 2005년 11월에 공식 발표하였고 몇개월 후에는 로터 프레임워크 2.0을 발표하기도 하였다. 모노 플랫폼의 경우 세번째 판의 초안이 나올 무렵부터 줄곧 세번째 판의 내용 대부분을 빠르게 반영해왔다. 또한 세번째 판에 수록된 내용에 맞추어 닷넷 플랫폼에서 사용이 가능한 다른 언어들(Visual Basic .NET, J#, JScript .NET, Visual C++ .NET MC++ 2.0 등)에 대한 내용도 같이 갱신되었으며 제 3자 언어들(Borland Delphi .NET, Chrome 등)도 세번째 판의 내용이 곧 반영될 예정이거나 이미 반영되었다.

[편집] 잘 알려진 C# 컴파일러들

  • Microsoft Visual C#: Microsoft가 C#에 대하여 내리는 모든 표준 정의를 가장 정확하고 안정적으로 반영하는 컴파일러이다. 최근에는 C# 3.0에 포함될 LINQ 확장과 같은 부분에 대한 기술적인 레퍼런스를 미리 테스트해볼 수 있는 도구로도 자주 쓰인다.
  • Borland(CodeGear) C# Builder : Microsoft의 .net을 지원하는 회사 중 가장 큰 회사로서 BDS2006 안에서 Delphi.net 과 C#.net 두가지 언어로 .net 을 지원한다
  • Microsoft Rotor 프로젝트: Microsoft .NET Framework가 발표된 후 수 개월 이후에 같이 발표되는 오픈 소스 프로젝트로 Microsoft 닷넷 플랫폼에 대한 대체 구현을 제공한다.
  • Mono Project: 마이크로소프트 닷넷 플랫폼에 대한 구현이 시작될 무렵에 시작되었으며, 현재는 제 3자 닷넷 플랫폼 중에서 가장 안정적이고 성숙되었다고 평가되는 프로젝트이다. 마이크로소프트 닷넷 플랫폼이 윈도우와 소수의 유닉스 플랫폼을 대상으로 하고 있는 것과는 달리 모노 플랫폼의 경우 윈도우보다는 리눅스, 유닉스, 맥 OS X, 솔라리스와 같이 윈도우 외의 운영 체제와 플랫폼을 대상으로 한다. 초기에는 지미안이 호스팅했으나 현재는 노벨 사에서 호스팅하고 있다. 모노 플랫폼을 기반으로 GTK#, 모질라 임베딩, IKVM(Java 바이트 코드를 모노 플랫폼 위에서 에뮬레이션하여 실행하는 VM), COCOA#, Nemerle 언어, MonoDevelop IDE 등의 기술을 지원한다. 또한 마이크로소프트 닷넷 플랫폼과 서로 호환이 가능하다. 다운로드 사이트
  • DotGNU Project: 모노와 비슷한 시기에 개발을 시작하였지만 아직 안정적인 버전이 출시되지 못하였다. 특유의 Portable .NET 엔진을 사용하고 있다.

[편집] C, C++과 C#의 차이점

큰 개념상의 차이점에 대한 쉬운 설명은 비주얼 베이직 닷넷을 참조.

C언어나 C++ 언어와 비교할 때 C#은 다음과 같은 점에서 단순화되거나 확장되었다.

  • 기본적으로 C#에서의 포인터는 unsafe 블록 또는 unsafe 형식에서 사용하도록 정의되어 있으며, unsafe 키워드를 사용하려면 컴파일러에게 /unsafe 또는 --unsafe 스위치를 지정하도록 명시해야 한다. unsafe 블록의 사용 예는 다음과 같다.
unsafe
{
    int *pA;
}
  • 닷넷 플랫폼에서 포인터를 다루는 기본 단위는 System.IntPtr이다. (System.UIntPtr은 특수한 목적으로 쓰이므로 설명에서 제외한다) C#은 unsafe 블록 안에서 사용이 가능한 직접적인 포인터(IntPtr.ToPointer 메서드로 void* 형식을 가져올 수 있음)도 지원한다.
  • 메모리 관리자에 의해 관리되는 데이터는 주소값이 자주 변경되므로, 잘못된 주소를 접근하는 등의 오류를 방지하기 위해 포인터는 참조 형식의 인스턴스를 가리킬 수 없는 것이 기본 원칙이며, 참조 형식의 필드를 멤버로 가지고 있는 구조체 역시 완전한 값 형식으로 판정하지 않고 참조 형식으로 처리하기 때문에 이 경우의 구조체의 인스턴스에 대해서도 포인터로 그 주소를 가리킬 수 없다.
  • C#에서의 포인터는 C, C++에서의 포인터와 비교하였을 때 문법적으로 다른 의미를 가진다. C, C++에서의 포인터는 특정한 형식의 인스턴스 또는 주소값을 가리키기 위한 목적으로 할당되는 주소값을 기억하기 위한 변수로 취급되지만 C#에서의 포인터는 System.IntPtr이라는 하나의 완성된 형식에 대한 확장 사양일 뿐이다. 그래서 C, C++의 포인터와 같은 쓰임새를 C#으로 이식할 수 없는 경우가 상당히 많다.
  • void* 포인터가 가리키는 값을 얻어낼 수 없고 void* 포인터에 대한 산술 연산도 수행할 수 없다.
  • 산술 연산은 컴파일러의 옵션 지정에 따라서 /checked+ 로 지정된 경우 모든 코드 범위에서 엄격한 산술 연산 검사를 할 수 있으며 /checked- 로 지정된 경우 모든 코드 범위에서 산술 연산 검사를 하지 않도록 할 수 있다. 컴파일러 옵션과는 관계없이 unchecked 블록 안에서는 검사되지 않으며, 반대로 checked 블록 안에서는 검사가 이루어진다.
int a = 0;
unchecked
{
    a = int.MaxValue + 20;
}
checked
{
    a = int.MaxValue * 2;
}
  • fixed 블록을 이용하여 힙에 데이터를 고정할 수 있다.
using System;

namespace FooBar
{
    class Program
    {
        private int Test = 123;

        static void Main(string[] args)
        {
            unsafe
            {
                Program p = new Program();

                fixed (int* ptrX = &p.Test)
                {
                    Console.Out.Write(Convert.ToString(*ptrX));
                    *ptrX = 21;
                    Console.Out.WriteLine(Convert.ToString(*ptrX));
                }
            }
        }
    }
}
  • C, C++에서 포인터를 다룰 때 발생하기 쉬운 가비지나 매달린 포인터와 같은 복잡한 문제를 C#에서는 가비지 컬렉터의 능력으로 자동으로 처리한다. 하지만 가비지 컬렉터가 수집을 하기 이전에 개별적으로 처리해야 할 필요가 있는 소거 작업의 구현을 위하여 IDisposable 인터페이스를 특정 클래스에서 구현하게 된다. IDisposable 인터페이스를 구현하는 클래스는 C#의 using 구문을 이용하여 자동으로 IDisposable.Dispose 메서드를 호출할 수도 있다.
  • C#은 C++과는 달리 부모 클래스를 하나만 사용할 수 있으며 구현해야 하는 인터페이스는 다수개를 지정할 수 있다. 이 점은 다중 부모 클래스로부터의 상속에서만 누릴 수 있는 이점을 잃게되는 단점을 가지지만 복잡성을 최소화하고 보다 명료한 상속 관계의 의미를 만들 수 있다는 점에서는 큰 도움이 된다.
  • C#은 C++보다 형 안전성에 대하여 더 관대하다. 이 말은 형 안정성을 보장할 수 없다는 것도 동시에 뜻한다. System.Object 클래스가 모든 클래스의 선조 클래스이기 때문에 이러한 관대함이 가능하게 되었다. (단, unsafe 블럭 내에서 사용되는 포인터 형식의 경우는 예외로 한다.)
  • 배열과 포인터를 정의하는 문법이 다르다. 배열 문법은 자바와 유사하다. 하지만 포인터의 경우 C#은 int*, void*, byte*, ...와 같이 하나의 완성된 형식으로서 이해할 수 있지만 C++은 메모리 주소값을 저장하도록 되어있는 형태이다. 포인터를 사용하고자 하는 목적은 같지만 C++에서처럼 어떤 곳에서나 주소를 참조할 수 있는 것은 아니므로 정확한 이해가 필요하다. (다만, 특수한 GCHandle 형식을 활용하여 Pinned Object를 생성하는 경우에는 이러한 접근이 가능할 수 있으나 특성에 맞지도 않으며 심각한 성능 저하를 일으키므로 좋은 방법이라고 할 수 없을것이다.)
// C#
int[] a = new int[5];
int* pA, pB;
// C++
int a[5];
int *pA, *pB;
  • C#에서의 열거형은 그 자체가 하나의 형식이고 열거형 아래에 정의된 상수들은 멤버 상수가 된다. 하지만 C++에서의 열거형은 열거형 형식 그 자체의 의미보다는 상수들이 전역적으로 쓰일 수 있다는 것에 더 초점을 둔다.
  • 형식 다형성에 대한 제약을 극복하고 형식 안정성을 향상시키기 위한 목적으로 도입한 제네릭 형식이란 것이 2.0 사양부터 존재한다. C++의 템플릿과 목표는 유사하지만 C++의 템플릿이 C++ 컴파일러보다 앞서서 처리되는 것에 비하여 C#의 제네릭 형식은 IL 메타데이터 상에 실제로 정보가 남는다. 이러한 차이점으로 인하여 Microsoft Visual C++에는 특이한 충돌 현상이 발생하게 되는데 여기에 대해서 전문적으로 다룬 기사를 MSDN Magazine에서 찾아볼 수 있다. [2]
  • 데이터 멤버를 다루는 구문에 의해 메서드가 호출되는 속성 기능이 있다. 이것을 정확한 이름으로는 프로퍼티라고 하며 getter 메서드와 setter 메서드로 구분된다. C#에서는 getter와 setter를 한꺼번에 사용할 수 있도록 아래와 같이 고정된 문법을 사용한다. Visual Basic .NET의 경우에도 이와 비슷하나 프로퍼티에서도 다수의 매개 변수를 받는 것을 허용한다. 그리고 특별한 사항이 없는 대다수의 다른 언어들에서의 프로퍼티는 get_foo() 메서드와 set_foo() 메서드로 구분되어 표현되곤 한다.
public string Name
{
    get
    {
        return m_name;
    }
    set
    {
        m_name = "Name :: "+value;
    }
}

public void MethodOne(string name)
{
    this.Name = "DotNet";
}
  • 모든 리플렉션이 지원된다.


[편집] 바깥 고리

주요 프로그래밍 언어 (더 보기)

산업용: 델파이 | 루비 | 리스프 | 비주얼 베이직 | 스몰토크 | 어셈블리 | 얼랑 | 에이다 | 오브젝티브-C | 자바 | 자바스크립트 | 코볼 | 파이썬 | Perl | 포트란 | ABAP | AWK | C | C++ | C# | PHP | PL/SQL | SAS | sh | VB.NET

학문용: 로고 | 스킴 | 에펠 | 파스칼 | 프롤로그 | 하스켈 | ML

역사적 의미가 있는 언어: 베이직 | 시뮬라 | 클리퍼 | 파워빌더 | ALGOL | APL | MUMPS | PL/I

Our "Network":

Project Gutenberg
https://gutenberg.classicistranieri.com

Encyclopaedia Britannica 1911
https://encyclopaediabritannica.classicistranieri.com

Librivox Audiobooks
https://librivox.classicistranieri.com

Linux Distributions
https://old.classicistranieri.com

Magnatune (MP3 Music)
https://magnatune.classicistranieri.com

Static Wikipedia (June 2008)
https://wikipedia.classicistranieri.com

Static Wikipedia (March 2008)
https://wikipedia2007.classicistranieri.com/mar2008/

Static Wikipedia (2007)
https://wikipedia2007.classicistranieri.com

Static Wikipedia (2006)
https://wikipedia2006.classicistranieri.com

Liber Liber
https://liberliber.classicistranieri.com

ZIM Files for Kiwix
https://zim.classicistranieri.com


Other Websites:

Bach - Goldberg Variations
https://www.goldbergvariations.org

Lazarillo de Tormes
https://www.lazarillodetormes.org

Madame Bovary
https://www.madamebovary.org

Il Fu Mattia Pascal
https://www.mattiapascal.it

The Voice in the Desert
https://www.thevoiceinthedesert.org

Confessione d'un amore fascista
https://www.amorefascista.it

Malinverno
https://www.malinverno.org

Debito formativo
https://www.debitoformativo.it

Adina Spire
https://www.adinaspire.com