C# 언어 및 .NET Framework 소개Introduction to the C# Language and the .NET Framework

유연하고 형식이 안전한 개체 지향 언어인 C#은 개발자가 .NET Framework에서 실행되는 안전하고 강력한 여러 애플리케이션을 빌드할 수 있도록 지원합니다.C# is an elegant and type-safe object-oriented language that enables developers to build a variety of secure and robust applications that run on the .NET Framework. C#을 사용하여 Windows 클라이언트 애플리케이션, XML Web services, 분산 구성 요소, 클라이언트-서버 애플리케이션, 데이터베이스 애플리케이션 등을 만들 수 있습니다.You can use C# to create Windows client applications, XML Web services, distributed components, client-server applications, database applications, and much, much more. Visual C#에서는 고급 코드 편집기, 편리한 사용자 인터페이스 디자이너, 통합 디버거 및 다른 많은 도구를 제공하여 C# 언어 및 .NET Framework에 따라 보다 쉽게 애플리케이션을 개발할 수 있습니다.Visual C# provides an advanced code editor, convenient user interface designers, integrated debugger, and many other tools to make it easier to develop applications based on the C# language and the .NET Framework.

참고

Visual C# 설명서에서는 사용자가 기본적인 프로그래밍 개념을 이해하고 있다고 간주합니다.The Visual C# documentation assumes that you have an understanding of basic programming concepts. 완전 초보 사용자인 경우 웹에서 사용할 수 있는 Visual C#을 살펴볼 수도 있습니다.If you are a complete beginner, you might want to explore Visual C# Express, which is available on the Web. C#에 대한 설명서 및 웹 리소스를 활용하여 실제 프로그래밍 기술을 배울 수도 있습니다.You can also take advantage of books and Web resources about C# to learn practical programming skills.

C# 언어C# Language

C# 구문은 다양한 표현 기능을 갖추면서도 간편하고 쉽게 배울 수 있습니다.C# syntax is highly expressive, yet it is also simple and easy to learn. C#의 중괄호 구문은 C, C++ 또는 Java에 익숙한 사용자라면 누구나 바로 알아볼 수 있습니다.The curly-brace syntax of C# will be instantly recognizable to anyone familiar with C, C++ or Java. 이러한 언어에 익숙한 개발자는 일반적으로 매우 짧은 시간 내에 C#으로 생산적인 작업을 수행할 수 있습니다.Developers who know any of these languages are typically able to begin to work productively in C# within a very short time. C# 구문은 C++의 복잡성을 획기적으로 단순화하고 Java에는 없는 null 허용 값 형식, 열거형, 대리자, 람다 식 및 직접 메모리 액세스와 같은 강력한 기능을 제공합니다.C# syntax simplifies many of the complexities of C++ and provides powerful features such as nullable value types, enumerations, delegates, lambda expressions and direct memory access, which are not found in Java. C#은 향상된 형식 안정성 및 성능을 제공하는 제네릭 메서드와 형식을 지원하고, 컬렉션 클래스의 구현을 통해 클라이언트 코드에서 쉽게 사용할 수 있는 사용자 지정 반복 동작을 정의할 수 있도록 하는 반복기를 지원합니다.C# supports generic methods and types, which provide increased type safety and performance, and iterators, which enable implementers of collection classes to define custom iteration behaviors that are simple to use by client code. LINQ(Language-Integrated Query)Language-Integrated Query (LINQ) 식은 강력한 형식의 쿼리를 최고의 언어 구문으로 만들어줍니다.expressions make the strongly-typed query a first-class language construct.

개체 지향 언어인 C#은 캡슐화, 상속 및 다형성의 개념을 지원합니다.As an object-oriented language, C# supports the concepts of encapsulation, inheritance, and polymorphism. 애플리케이션의 진입점인 Main 메서드를 포함하는 모든 변수 및 메서드가 클래스 정의 내에 캡슐화됩니다.All variables and methods, including the Main method, the application's entry point, are encapsulated within class definitions. 클래스는 단일 부모 클래스에서 직접 상속될 수 있지만 원하는 수의 인터페이스를 구현할 수 있습니다.A class may inherit directly from one parent class, but it may implement any number of interfaces. 부모 클래스에서 가상 메서드를 재정의하는 메서드에는 우발적인 재정의를 방지하는 방법으로 override 키워드가 필요합니다.Methods that override virtual methods in a parent class require the override keyword as a way to avoid accidental redefinition. C#에서 구조체는 같은 클래스와 같습니다. 즉, 인터페이스를 구현할 수 있지만 상속을 지원하지 않는 스택 할당 형식입니다.In C#, a struct is like a lightweight class; it is a stack-allocated type that can implement interfaces but does not support inheritance.

이러한 기본 개체 지향 원칙 외에도, C#은 다음을 포함한 몇 가지 혁신적인 언어 구문을 통해 소프트웨어 구성 요소를 쉽게 개발하도록 지원합니다.In addition to these basic object-oriented principles, C# makes it easy to develop software components through several innovative language constructs, including the following:

  • 대리자라고 하는 캡슐화된 메서드 시그니처: 형식이 안전한 이벤트 알림을 가능하게 합니다.Encapsulated method signatures called delegates, which enable type-safe event notifications.

  • 속성: 전용 멤버 변수에 대한 접근자 역할을 합니다.Properties, which serve as accessors for private member variables.

  • 특성: 런타임에 형식에 대한 선언적 메타데이터를 제공합니다.Attributes, which provide declarative metadata about types at run time.

  • 인라인 XML 문서 주석Inline XML documentation comments.

  • LINQ(Language-Integrated Query)Language-Integrated Query (LINQ): 다양한 데이터 소스에 대한 기본 제공 쿼리 기능을 제공합니다.which provides built-in query capabilities across a variety of data sources.

COM 개체 또는 네이티브 Win32 DLL 등의 다른 Windows 소프트웨어와 상호 작용해야 하는 경우 C#에서 “Interop”라는 프로세스를 통해 작업할 수 있습니다.If you have to interact with other Windows software such as COM objects or native Win32 DLLs, you can do this in C# through a process called "Interop". Interop을 사용하면 네이티브 C++ 애플리케이션에서 수행할 수 있는 거의 모든 작업을 C# 프로그램으로 수행할 수 있습니다.Interop enables C# programs to do almost anything that a native C++ application can do. C#은 직접 메모리 액세스가 절대적으로 중요한 경우를 위한 "안전하지 않은" 코드 개념 및 포인터까지도 지원합니다.C# even supports pointers and the concept of "unsafe" code for those cases in which direct memory access is absolutely critical.

C# 빌드 프로세스는 C 및 C++과 비교해서 비교적 간단하며 Java의 경우보다 좀 더 유연합니다.The C# build process is simple compared to C and C++ and more flexible than in Java. 별도 헤더 파일이 없으며, 메서드 및 형식을 특정 순서로 선언할 필요도 없습니다.There are no separate header files, and no requirement that methods and types be declared in a particular order. C# 소스 파일은 원하는 수의 클래스, 구조체, 인터페이스 및 이벤트를 정의할 수 있습니다.A C# source file may define any number of classes, structs, interfaces, and events.

다음은 추가적인 C# 리소스입니다.The following are additional C# resources:

.NET Framework 플랫폼 아키텍처.NET Framework Platform Architecture

C# 프로그램은 CLR(공용 언어 런타임)이라고 하는 가상 실행 시스템과 통합된 클래스 라이브러리 세트를 포함하는 Windows의 통합 구성 요소인 .NET Framewor에서 실행됩니다.C# programs run on the .NET Framework, an integral component of Windows that includes a virtual execution system called the common language runtime (CLR) and a unified set of class libraries. CLR은 언어 및 라이브러리가 원활하게 함께 작동하는 실행 및 개발 환경을 만들기 위한 기준이 되는 국제 표준인 CLI(공용 언어 인프라)를 Microsoft에서 상업적으로 구현한 것입니다.The CLR is the commercial implementation by Microsoft of the common language infrastructure (CLI), an international standard that is the basis for creating execution and development environments in which languages and libraries work together seamlessly.

C#으로 작성된 소스 코드는 CLI 사양을 준수하는 IL(중간 언어)로 컴파일됩니다.Source code written in C# is compiled into an intermediate language (IL) that conforms to the CLI specification. IL 코드 및 리소스(예: 비트맵 및 문자열)는 일반적으로 확장명이 .exe 또는 .dll인 어셈블리라는 실행 파일로 디스크에 저장됩니다.The IL code and resources, such as bitmaps and strings, are stored on disk in an executable file called an assembly, typically with an extension of .exe or .dll. 어셈블리는 어셈블리의 형식, 버전, 문화권 및 보안 요구 사항에 대한 정보를 제공하는 매니페스트를 포함합니다.An assembly contains a manifest that provides information about the assembly's types, version, culture, and security requirements.

C# 프로그램이 실행될 경우 어셈블리가 CLR에 로드되어 매니페스트의 정보를 기준으로 다양한 작업을 수행할 수 있습니다.When the C# program is executed, the assembly is loaded into the CLR, which might take various actions based on the information in the manifest. 그런 다음 보안 요구 사항을 충족되면 CLR은 JIT(Just-In-Time) 컴파일을 수행하여 IL 코드를 네이티브 기계어 명령으로 변환합니다.Then, if the security requirements are met, the CLR performs just in time (JIT) compilation to convert the IL code to native machine instructions. 또한 CLR은 자동 가비지 수집, 예외 처리 및 리소스 관리와 관련된 다른 서비스도 제공합니다.The CLR also provides other services related to automatic garbage collection, exception handling, and resource management. CLR에서 실행되는 코드는 "관리 코드"라고도 합니다. 즉, 특정 시스템을 대상으로 하는 네이티브 기계어로 컴파일되는 "비관리 코드"와는 반대됩니다.Code that is executed by the CLR is sometimes referred to as "managed code," in contrast to "unmanaged code" which is compiled into native machine language that targets a specific system. 다음 다이어그램은 C# 소스 코드 파일, .NET Framework 클래스 라이브러리, 어셈블리 및 CLR의 컴파일 타임 및 런타임 관계를 보여 줍니다.The following diagram illustrates the compile-time and run-time relationships of C# source code files, the .NET Framework class libraries, assemblies, and the CLR.

C# 소스 코드부터 머신 실행까지

언어 상호 운용성은 .NET Framework의 주요 기능입니다.Language interoperability is a key feature of the .NET Framework. C# 컴파일러에서 생성된 IL 코드는 CTS(공용 형식 사양)을 준수하므로 C#에서 생성된 IL 코드는 .NET 버전의 Visual Basic, Visual C++ 또는 20개 이상의 다른 CTS 규격 언어에서 생성된 코드와 상호 작용할 수 있습니다.Because the IL code produced by the C# compiler conforms to the Common Type Specification (CTS), IL code generated from C# can interact with code that was generated from the .NET versions of Visual Basic, Visual C++, or any of more than 20 other CTS-compliant languages. 단일 어셈블리는 다른 .NET 언어로 작성된 여러 모듈을 포함할 수 있고 형식은 마치 같은 언어로 작성된 것처럼 서로를 참조할 수 있습니다.A single assembly may contain multiple modules written in different .NET languages, and the types can reference each other just as if they were written in the same language.

.NET Framework에는 런타임 서비스 외에, 파일 입/출력부터 문자열 조작, XML 구문 분석, Windows Forms 컨트롤에 이르는 모든 항목에 대해 다양하고 유용한 기능을 제공하는 네임스페이스로 구성된 4,000개가 넘는 광범위한 클래스 라이브러리도 포함됩니다.In addition to the run time services, the .NET Framework also includes an extensive library of over 4000 classes organized into namespaces that provide a wide variety of useful functionality for everything from file input and output to string manipulation to XML parsing, to Windows Forms controls. 일반적인 C# 애플리케이션은 .NET Framework 클래스 라이브러리를 광범위하게 사용하여 일반적인 "배관" 작업을 처리합니다.The typical C# application uses the .NET Framework class library extensively to handle common "plumbing" chores.

.NET Framework에 대한 자세한 내용은 Microsoft.NET Framework 개요를 참조하세요.For more information about the .NET Framework, see Overview of the Microsoft .NET Framework.

참고 항목See also