C#은 Java로부터 많은 영향을 받았기 때문에, 대략적인 구조만 놓고 보자면 Java와 크게 다르지 않습니다.

다만 마이크로소프트가 애초부터 .NET의, .NET에 의한, .NET을 위한 언어로 설계한 언어이기 때문에 몇몇 부분에서 차이가 나기도 합니다. 이번 챕터에서는 C#이라는 언어의 기본 구조에 대해 다룹니다.

 

진입점 (Entry Point)

모든 실행 가능한 C# 프로그램은 진입점을 가집니다. 진입점이란 프로그램이 시작되는 지점을 말합니다.

C#에서의 진입점은 Main이라는 정적(static) 메서드의 형태로 정의되며 Java나 C, C++의 main 함수와도 같습니다.

using System;

public static class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Hello, World!");
    }
}

보통 Main은 void를 리턴형으로 하여 아무것도 리턴하지 않도록 하지만, int 또한 리턴형으로 가질 수 있기 때문에 Exit Code를 전달할 수도 있습니다.

 

Main의 인자인 args는 문자열 배열로 받습니다. 명령행 인수(Commandline Arguments)로 전달된 값들은 이 배열의 원소로 저장되어 프로그램 내에서 사용할 수 있습니다.

$ dotnet MyDotNetProgram.dll
args = []

$ dotnet MyDotNetProgram.dll Hello
args = [ "Hello" ]

$ dotnet MyDotNetProgram.dll -a -b -c
args = [ "-a", "-b", "-c" ]

$ dotnet MyDotNetProgram.dll "space here" hi
args = [ "space here", "hi" ]

참고로 4번째 예제에서 볼 수 있듯, 따옴표로 묶여있다면 스페이스바가 있다 하더라도 하나의 문자열로 취급됩니다.

 

네임스페이스와 using

네임스페이스는 클래스, 구조체, 혹은 네임스페이스 자기 자신을 구분할 수 있는 일종의 범위입니다. 주로 큰 프로그램에서 많이 사용되며 .NET의 여러 기능들 또한 네임스페이스를 이용하여 구분되어있습니다.

 

네임스페이스 안으로 접근하고 싶다면 .(점) 연산자를 사용하면 됩니다. 예를 들어, 화면에 문자열을 출력하는 메서드인 Console.WriteLine의 경우 System 네임스페이스 안에 정의되어 있으므로

System.Console.WriteLine("");

라는 식으로 사용하면 됩니다.

 

하지만 매번 System을 입력하는 것은 번거롭기도 하고 여러모로 유지보수의 관점에서도 바람직하지 않습니다. 그러므로, using을 이용하여 간소화시킬 수 있습니다.

using System;

// ... 생략

Console.WriteLine("Hello, World!"); // System.Console.WriteLine

 

Statement와 Expression

여타 다른 프로그래밍 언어가 그렇듯 C# 또한 Statement와 Expression의 개념이 존재합니다.

 

Statement는 프로그램 내에서 수행되는 작업의 개별 단위입니다. 변수 선언, 할당, 메서드 호출, 분기 등등을 포함하며 일반적인 경우 먼저 나온 Statement가 먼저 실행됩니다. 개별 Statement는 ;(세미콜론)으로 구분됩니다.

 

Expression은 값이나 객체, 타입, 네임스페이스 등을 나타내는 일종의 단위입니다. Statement와는 달리 단독으로 사용될 수 없습니다.

 

References

https://docs.microsoft.com/dotnet/csharp/programming-guide/main-and-command-args/

https://docs.microsoft.com/ko-kr/dotnet/csharp/programming-guide/main-and-command-args/command-line-arguments

https://docs.microsoft.com/ko-kr/dotnet/csharp/programming-guide/statements-expressions-operators/

https://docs.microsoft.com/ko-kr/dotnet/csharp/tour-of-csharp/program-structure