C# 프로그램의 구조

목차

C#의 핵심 조직

C#의 핵심 조직 개념은 ‘프로그램’, ‘네임스페이스’, ‘형식’, ‘멤버’, ‘어셈블리’입니다. 프로그램은 멤버를 포함하고 네임스페이스로 구성될 수 있는 형식을 선언합니다. 클래스, 구조체 및 인터페이스는 형식의 하나 입니다. 필드, 메서드, 속성 및 이벤트는 멤버의 하나 입니다.

C# 프로그램을 컴파일하면 실제로 어셈블리로 패키지됩니다. 어셈블리는 일반적으로 애플리케이션을 구현하는지 또는 *라이브러리**를 구현하는지에 따라 각각 파일 확장명 .exe 또는 .dll을 갖습니다.

어셈블리 예제

간단한 예로, 다음 코드를 포함하는 어셈블리를 생각해 볼 수 있습니다.

using System; 

namespace Acme.Collections 
{
     public class Stack<T>
     {
         Entry _top;
         
         public void Push(T data)
         {       
              _top = new Entry(_top, data);
         }

         public T Pop()
         {
             if (_top == null)
             {
                 throw new InvalidOperationException();
             }

             T result = _top.Data;
             _top = _top.Next;
             
             return result;
         }

         class Entry
         {
             public Entry Next { get; set; }
             public T Data { get; set; }
             
             public Entry(Entry next, T data)
             {
                 Next = next;
                 Data = data;
             }
         }
     }
 }

이 클래스의 정규화된 이름은 Acme.Collections.Stack입니다. 클래스에는 필드 top, 2개의 메서드 Push 및 Pop, 중첩된 클래스 Entry 등의 여러 멤버가 포함됩니다. Entry 클래스는 필드 next 및 필드 data, 생성자의 세 멤버가 포함됩니다. Stack은 제네릭 클래스입니다. 이는 사용 시 구체적인 형식으로 대체되는 T 형식 매개 변수 하나를 포함합니다.

어셈블리에는 IL(중간 언어) 명령 형식의 실행 코드와 메타데이터 형식의 기호 정보가 포함됩니다. 어셈블리가 실행되기 전에, .NET 공용 언어 런타임의 JIT(Just-In-Time) 컴파일러가 어셈블리 안의 IL 코드를 해당 프로세서에 맞는 코드로 변환합니다.

어셈블리는 코드와 메타데이터를 모두 포함하는 기능의 자체 설명 단위이므로 C#에서는 #include 지시문과 헤더 파일이 필요하지 않습니다. 특정 어셈블리에 포함된 공용 형식 및 멤버는 프로그램을 컴파일할 때 해당 어셈블리를 참조하는 것만으로 C# 프로그램에서 사용 가능해집니다. 예를 들어 이 프로그램에서는 acme.dll 어셈블리의 Acme.Collections.Stack 클래스를 사용합니다.

Acme.Collections.Stack를 사용하는 프로그램 예제

using System; 
using Acme.Collections;

class Example 
{
     public static void Main()
     {
         var s = new Stack<int>();
         s.Push(1); // stack contains 1
         s.Push(10); // stack contains 1, 10
         s.Push(100); // stack contains 1, 10, 100
         Console.WriteLine(s.Pop()); // stack contains 1, 10
         Console.WriteLine(s.Pop()); // stack contains 1
         Console.WriteLine(s.Pop()); // stack is empty
     }
 }

이 프로그램을 컴파일하려면 위의 예제에 정의된 스택 클래스를 포함하는 어셈블리를 참조해야 합니다.

관련 글  C#의 클래스 및 객체

C# 프로그램은 여러 원본 파일에 저장될 수 있습니다. C# 프로그램을 컴파일하면 모든 원본 파일이 함께 처리되고 서로를 제약 없이 참조할 수 있습니다. 개념적으로 처리되기 전에 모든 원본 파일이 하나의 대량 파일에 연결된 것과 같습니다. 소수의 경우를 제외하고 선언 순서는 중요하지 않으므로 C#에서는 정방향 선언이 필요한 경우가 없습니다. C#은 소스 파일을 하나의 공용 형식만 선언하도록 제한하거나 소스 파일 이름이 소스 파일에 선언된 형식과 일치하도록 요구하지 않습니다.

이점은 객체지향 프로그램이 좋은점이기도 합니다.

최신글

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다