[C#] 1.3 Hello, World! 프로그램 설명

다음은 Hello, World! 프로그램의 소스 코드입니다. 여기에서는 이들에 대한 설명을 통해 C#의 소스 구성을 간략하게 살펴보겠습니다.

▶ Program.cs

/*Hello, World! 프로그램: 콘솔 화면에 "Hello, World!"를 출력*/
using System;
namespace HelloWorld
{
    /// <summary>
    /// 진입점 메서드를 포함하고 있는 클래스
    /// </summary>
    class Program
    {
        /// <summary>
        /// 진입점 메서드
        /// </summary>
        /// <param name="args">진입점 전달 인자</param>
        static void Main(string[] args)
        {
            Console.WriteLine("Hello, World!");
        }
    }
}

1.3.1 주석

주석은 실제 수행되는 코드가 아니라 개발자가 코드를 이해하기 쉽게 작성하는 것입니다. C#에서도 C언어나 C++처럼 한 줄 주석에는 //를 사용하고 특정 영역을 주석으로 만들 때는 영역의 시작에 /*를 영역의 끝에 */를 사용합니다. Microsoft Visual Studio 에서는 주석을 만들거나 해제하기 쉽게 [그림4]처럼 툴바에 버튼을 제공하고 있습니다.

주석 처리와 해제를 용이하게 하는 버튼
[그림 4] 주석 처리와 해제를 용이하게 하는 버튼

 사용자가 정의하는 형식이나 형식 내 멤버에 대한 주석은 /// 를 사용하면 편집 창에서 이를 사용할 때 향상된 인텔리센스를 통해 주석의 내용을 확인할 수 있어 개발이 쉬워집니다.

향상된 인텔리센스

[그림5] 향상된 인텔리센스

 메뉴 => 프로젝트 => 속성 => 빌드 탭을 선택하신 후에 XML 문서 파일 체크박스를 선택하시면 빌드 시에 출력 폴더에 xml문서가 작성이 됩니다. 특히 라이브러리를 만들 때 이처럼 프로젝트를 설정하면 사용하는 곳에서도 향상된 인텔리센스의 도움을 받을 수 있습니다. 이 부분은 10장 .NET 어셈블리에서 다시 한 번 언급하겠습니다.

XML 문서 파일 출력 설정
[그림 6] XML 문서 파일 출력 설정

▶ HelloWorld.XML

<?xml version="1.0"?>
<doc>
    <assembly>
        <name>HelloWorld</name>
    </assembly>
    <members>
        <member name="T:HelloWorld.Program">
            <summary>
            진입점 메서드를 포함하고 있는 클래스
            </summary>
        </member>
        <member name="M:HelloWorld.Program.Main(System.String[])">
            <summary>
            진입점 메서드
            </summary>
            <param name="args">진입점 전달 인자</param>
        </member>
    </members>
</doc>

1.3.2 namespace

 C#에서는 namespace는 형식 이름 사이에 충돌을 막기 위해 제공하고 있습니다. 만약, 참조한 두 개의 .NET 어셈블리에 같은 이름의 클래스가 정의되어 있다면 이름 충돌이 발생하여 어느 클래스를 사용하려는 것인지 개발도구는 판단할 수 없게 됩니다. C#에서는 이러한 이름 충돌을 막기 위해 namespace 문법을 제공하고 있습니다.

 Console은 .NET Framework에서 제공하는 공용 클래스 라이브러리에서 System 이름 공간에 정의된 클래스입니다. 이를 사용하기 위해 using 구문을 사용하였습니다.

using System;

  Microsoft Visual Studio 2010에서는 소스 코드에서 사용해야 하는 namespace를 쉽게 추가하거나 사용하지 않는 namespace를 제거하는 컨텍스트 메뉴(오른쪽 마우스를 클릭했을 때 뜨는 메뉴)를 제공하고 있습니다. 만약, 사용하는 형식이 어떠한 이름 공간에 있는지 정확히 모르고 해당 형식에 대한 using 구문이 없다면 사용하는 코드에서 컨텍스트 메뉴를 통해 추가하거나 단축키(Shift+F10 혹은 Shift+Alt+F10)를 이용하십시오.

컨텍스트 메뉴를 통한 using 구문 추가 및 제거
[그림 7] 컨텍스트 메뉴를 통한 using 구문 추가 및 제거

1.3.3 class

  C#으로 작성한 응용 프로그램은 최소한 하나 이상의 클래스를 가지고 있어야 합니다.

 클래스는 C# 언어에서 사용자 정의 형식을 만드는 방법의 하나이며 가장 강력하고 일반적으로 사용됩니다. 이 외에도 사용자 정의 형식을 만들기 위해 구조체와 열거형을 제공하고 있습니다. 클래스와 구조체는 여러 멤버들을 하나의 패키지로 캡슐화하는 주요한 도구이며 열거형은 변수가 가질 수 있는 값의 종류를 정의할 수 있습니다. 이 책은 대부분 이들에 대한 설명으로 이루어진다고 볼 수 있습니다.

1.3.4 Main

 Main은 프로그램의 진입점으로써 정적 메서드입니다. 여러분은 목적에 따라 Main 메서드를 다음 중 한 가지 형태로 정의할 수 있습니다.

 만약, Main 정적 메서드가 두 개 이상의 클래스에 정의되어 있을 때는 컴파일러 옵션을 통해 시작 개체를 지정해 주어야 합니다. 시작 개체를 설정하는 방법은 메뉴 => 프로젝트 => 속성 => 응용 프로그램 탭을 선택한 후에 시작 개체 콤보 박스에서 원하는 항목을 선택하시면 됩니다.

static void Main();
static int Main();
static int Main(string[] args);
static void Main(string[] args);

1.3.5 Console.WriteLine

 Console은 .NET Framework에서 제공하는 클래스 라이브러리에서 제공되는 클래스 중의 하나이며 System namespace에 정의되어 있습니다. Console 클래스는 표준 출력, 표준 입력 및 오류 스트림을 나타내며 콘솔 응용 프로그램에서 입출력 작업을 위해 자주 사용됩니다. 그중에 WriteLine은 정적 멤버 메소드로 표준 출력에 입력 인자로 전달된 문자열과 개행을 출력하는 역할을 담당합니다.