C# 언어 둘러보기A Tour of the C# Language

C#(“씨샵”이라고 발음합니다)은 간단하면서도 형식이 안전한 최신 개체 지향 프로그래밍 언어입니다.C# (pronounced "See Sharp") is a simple, modern, object-oriented, and type-safe programming language. C#은 C 언어 제품군에서 시작되었으며 C, C++, Java 및 JavaScript 프로그래머에게 친숙할 것입니다.C# has its roots in the C family of languages and will be immediately familiar to C, C++, Java, and JavaScript programmers. 이 둘러보기에서는 이 언어의 주요 구성 요소에 대한 개요를 제공합니다.This tour provides an overview of the major components of the language. 대화형 예제를 통해 언어를 살펴보려면 C# 소개 자습서를 사용해 보세요.If you want to explore the language through interactive examples, try our introduction to C# tutorials.

C#은 개체 지향 언어이지만 구성 요소 지향 프로그래밍도 지원합니다.C# is an object-oriented language, but C# further includes support for component-oriented programming. 현대의 소프트웨어 설계는 독립적이고 자체 설명적인 기능 패키지 형식을 갖는 소프트웨어 구성 요소에 점점 더 많이 의존하고 있습니다.Contemporary software design increasingly relies on software components in the form of self-contained and self-describing packages of functionality. 이러한 구성 요소의 핵심은 속성, 메서드 및 이벤트를 포함하는 프로그래밍 모델을 제공한다는 데 있습니다. 이러한 구성 요소는 구성 요소에 대한 선언적 정보를 제공하는 특성을 보유하며 자체 설명서를 통합하고 있습니다.Key to such components is that they present a programming model with properties, methods, and events; they have attributes that provide declarative information about the component; and they incorporate their own documentation. C#은 이러한 개념을 직접적으로 지원하는 언어 구문을 제공함으로써 소프트웨어 구성 요소를 만들고 사용할 수 있는 뛰어난 자연 언어로 자리매김하게 되었습니다.C# provides language constructs to support directly these concepts, making C# a very natural language in which to create and use software components.

몇 가지 C# 기능은 강력하고 안정적인 애플리케이션을 구축하는 데 도움을 줍니다. 가비지 수집은 연결할 수 없는 미사용 개체가 차지하는 메모리를 자동으로 회수합니다. 예외 처리는 오류 감지 및 복구에 대한 체계적이고 확장 가능한 접근 방식을 제공합니다. 언어의 형식 안전 설계는 초기화되지 않은 변수에서 읽을 수 없게 하고, 범위를 초과하는 배열을 인덱싱할 수 없게 하고, 확인되지 않은 형식 캐스트를 수행할 수 없게 합니다.Several C# features aid in the construction of robust and durable applications: Garbage collection automatically reclaims memory occupied by unreachable unused objects; exception handling provides a structured and extensible approach to error detection and recovery; and the type-safe design of the language makes it impossible to read from uninitialized variables, to index arrays beyond their bounds, or to perform unchecked type casts.

C#에는 통합 형식 시스템이 있습니다.C# has a unified type system. intdouble과 같은 기본 형식을 포함하는 모든 C# 형식은 단일 루트 object에서 상속됩니다.All C# types, including primitive types such as int and double, inherit from a single root object type. 따라서 일반적인 작업 집합을 공유하는 모든 형식과 모든 형식의 값을 일관된 방식으로 저장 및 전송하고 작업을 수행할 수 있습니다.Thus, all types share a set of common operations, and values of any type can be stored, transported, and operated upon in a consistent manner. 그뿐 아니라 C#은 사용자 정의 참조 형식 및 값 형식을 모두 지원하여 개체의 동적 할당과 더불어 간단한 구조의 인라인 스토리지도 구현합니다.Furthermore, C# supports both user-defined reference types and value types, allowing dynamic allocation of objects as well as in-line storage of lightweight structures.

C# 프로그램 및 라이브러리가 호환되는 방식으로 계속 진화할 수 있도록 하기 위해 C# 설계에서 버전 관리 측면이 집중 관리되어 왔습니다.To ensure that C# programs and libraries can evolve over time in a compatible manner, much emphasis has been placed on versioning in C#'s design. 다양한 프로그래밍 언어가 이 문제를 등한시하여 결과적으로 해당 언어로 작성된 프로그램이 최신 버전의 종속 라이브러리가 도입될 때 필요한 것보다 더 자주 중단되게 되었습니다.Many programming languages pay little attention to this issue, and, as a result, programs written in those languages break more often than necessary when newer versions of dependent libraries are introduced. 버전 관리 고려 사항의 직접적인 영향을 받은 C# 설계의 측면에는 별도의 virtualoverride 한정자, 메서드 오버로드 확인 규칙 및 명시적 인터페이스 멤버 선언에 대한 지원이 포함됩니다.Aspects of C#'s design that were directly influenced by versioning considerations include the separate virtual and override modifiers, the rules for method overload resolution, and support for explicit interface member declarations.

Hello WorldHello world

“Hello, World” 프로그램은 프로그래밍 언어를 소개하는 데 일반적으로 사용됩니다.The "Hello, World" program is traditionally used to introduce a programming language. C#에서는 다음과 같습니다.Here it is in C#:

using System;

class Hello
{
    static void Main()
    {
        Console.WriteLine("Hello, World");
    }
}

C# 소스 파일은 일반적으로 파일 확장명이 .cs입니다.C# source files typically have the file extension .cs. “Hello, World” 프로그램이 파일 hello.cs에 저장되어 있다고 가정할 경우 프로그램은 다음 명령줄을 사용하여 컴파일할 수 있습니다.Assuming that the "Hello, World" program is stored in the file hello.cs, the program might be compiled using the command line:

csc hello.cs

이 명령줄은 hello.exe라는 실행 가능한 어셈블리를 생성합니다.which produces an executable assembly named hello.exe. 이 애플리케이션이 실행될 때 생성하는 출력은 다음과 같습니다.The output produced by this application when it is run is:

Hello, World

중요

csc 명령은 전체 프레임워크에 대해 컴파일을 수행하며 모든 플랫폼에서 사용 가능하지는 않을 수 있습니다.The csc command compiles for the full framework, and may not be available on all platforms.

“Hello, World” 프로그램은 System 네임스페이스를 참조하는 using 지시문으로 시작합니다.The "Hello, World" program starts with a using directive that references the System namespace. 네임스페이스는 계층적으로 C# 프로그램 및 라이브러리를 구성하는 방법을 제공합니다.Namespaces provide a hierarchical means of organizing C# programs and libraries. 네임스페이스에는 형식 및 다른 네임스페이스가 포함됩니다. 예를 들어 System 네임스페이스에는 많은 형식(예: 프로그램에 참조되는 Console 클래스) 및 많은 다른 네임스페이스(예: IOCollections)가 포함되어 있습니다.Namespaces contain types and other namespaces—for example, the System namespace contains a number of types, such as the Console class referenced in the program, and a number of other namespaces, such as IO and Collections. 지정된 네임스페이스를 참조하는 using 지시문을 사용하여 해당 네임스페이스의 멤버인 형식을 정규화되지 않은 방식으로 사용할 수 있습니다.A using directive that references a given namespace enables unqualified use of the types that are members of that namespace. using 지시문 때문에, 프로그램은 Console.WriteLineSystem.Console.WriteLine의 약식으로 사용할 수 있습니다.Because of the using directive, the program can use Console.WriteLine as shorthand for System.Console.WriteLine.

“Hello, World” 프로그램에서 선언된 Hello 클래스에는 단일 멤버인 Main 메서드가 있습니다.The Hello class declared by the "Hello, World" program has a single member, the method named Main. Main 메서드는 static 한정자로 선언됩니다.The Main method is declared with the static modifier. 인스턴스 메서드는 키워드 this를 사용하여 특정 바깥쪽 개체 인스턴스를 참조할 수 있지만 정적 메서드는 특정 개체에 대한 참조 없이 작동합니다.While instance methods can reference a particular enclosing object instance using the keyword this, static methods operate without reference to a particular object. 관례상 Main이라는 정적 메서드가 프로그램의 진입점으로 사용됩니다.By convention, a static method named Main serves as the entry point of a program.

프로그램의 출력은 System 네임스페이스에 있는 Console 클래스의 WriteLine 메서드에 의해 생성됩니다.The output of the program is produced by the WriteLine method of the Console class in the System namespace. 이 클래스는 기본적으로는 컴파일러에서 자동으로 참조되는 표준 클래스 라이브러리를 통해 제공됩니다.This class is provided by the standard class libraries, which, by default, are automatically referenced by the compiler.

C#에 대해 자세히 알아볼 수 있는 많은 리소스가 있습니다.There's a lot more to learn about C#. 다음 항목에서는 C# 언어의 요소에 대한 개요를 제공합니다.The following topics provide an overview of the elements of the C# language. 이러한 개요는 언어의 모든 요소에 대한 기본 정보를 제공하고 C# 언어의 요소를 보다 깊이 있게 이해하는 데 필요한 정보를 제공합니다.These overviews will provide basic information about all elements of the language and give you the information necessary to dive deeper into elements of the C# language:

  • 프로그램 구조Program Structure
    • C#의 핵심적인 조직 개념은 프로그램, 네임스페이스, 형식, 멤버어셈블리입니다.Learn the key organizational concepts in the C# language: programs, namespaces, types, members, and assemblies.
  • 형식 및 변수Types and Variables
    • C# 언어의 값 형식, 참조 형식변수에 대해 알아봅니다.Learn about value types, reference types, and variables in the C# language.
  • Expressions
    • 피연산자연산자로 생성됩니다.Expressions are constructed from operands and operators. 식은 값을 생성합니다.Expressions produce a value.
  • Statements
    • 을 사용하여 프로그램의 동작을 나타낼 수 있습니다.You use statements to express the actions of a program.
  • 클래스 및 개체Classes and objects
    • 클래스는 C#의 가장 기본적인 형식입니다.Classes are the most fundamental of C#'s types. 개체는 클래스의 인스턴스입니다.Objects are instances of a class. 클래스는 멤버를 사용해서 빌드되며 이 내용은 이 항목에도 나와 있습니다.Classes are built using members, which are also covered in this topic.
  • 구조체Structs
    • 구조체는 클래스와 달리 값 형식에 해당하는 데이터 구조체입니다.Structs are data structures that, unlike classes, are value types.
  • 배열Arrays
    • 배열은 계산된 인덱스를 통해 액세스되는 여러 변수를 포함하는 데이터 구조입니다.An array is a data structure that contains a number of variables that are accessed through computed indices.
  • 인터페이스Interfaces
    • 인터페이스는 클래스 및 구조체에서 구현될 수 있는 계약을 정의합니다.An interface defines a contract that can be implemented by classes and structs. 인터페이스는 메서드, 속성, 이벤트 및 인덱서를 포함할 수 있습니다.An interface can contain methods, properties, events, and indexers. 인터페이스는 정의하는 멤버의 구현을 제공하지 않으며 단순히 인터페이스를 구현하는 클래스 또는 구조체에서 제공해야 하는 멤버를 지정합니다.An interface does not provide implementations of the members it defines—it merely specifies the members that must be supplied by classes or structs that implement the interface.
  • 열거형Enums
    • 열거형 형식은 명명된 상수 집합을 갖는 고유 값 형식입니다.An enum type is a distinct value type with a set of named constants.
  • 대리자Delegates
    • 대리자는 특정 매개 변수 목록 및 반환 형식이 있는 메서드에 대한 참조를 나타내는 형식입니다.A delegate type represents references to methods with a particular parameter list and return type. 대리자는 메서드를 변수에 할당되고 매개 변수로 전달될 수 있는 엔터티로 취급할 수 있도록 합니다.Delegates make it possible to treat methods as entities that can be assigned to variables and passed as parameters. 또한 대리자는 다른 언어에 나오는 함수 포인터의 개념과 비슷하지만 함수 포인터와 달리 대리자는 개체 지향적이며 형식 안전 방식입니다.Delegates are similar to the concept of function pointers found in some other languages, but unlike function pointers, delegates are object-oriented and type-safe.
  • 특성Attributes
    • 특성을 사용하면 프로그램에서 형식, 멤버 및 다른 엔터티에 대한 추가 선언 정보를 지정할 수 있습니다.Attributes enable programs to specify additional declarative information about types, members, and other entities.