다음은 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]처럼 툴바에 버튼을 제공하고 있습니다.
사용자가 정의하는 형식이나 형식 내 멤버에 대한 주석은 /// 를 사용하면 편집 창에서 이를 사용할 때 향상된 인텔리센스를 통해 주석의 내용을 확인할 수 있어 개발이 쉬워집니다.
메뉴 => 프로젝트 => 속성 => 빌드 탭을 선택하신 후에 XML 문서 파일 체크박스를 선택하시면 빌드 시에 출력 폴더에 xml문서가 작성이 됩니다. 특히 라이브러리를 만들 때 이처럼 프로젝트를 설정하면 사용하는 곳에서도 향상된 인텔리센스의 도움을 받을 수 있습니다. 이 부분은 10장 .NET 어셈블리에서 다시 한 번 언급하겠습니다.
▶ 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)를 이용하십시오.
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은 정적 멤버 메소드로 표준 출력에 입력 인자로 전달된 문자열과 개행을 출력하는 역할을 담당합니다.