C#/디딤돌 C#

1. C# 소개

언휴 2024. 1. 18. 16:07

1. C# 소개

  안녕하세요. 언제나 휴일입니다. 

  컴퓨터 혹은 스마트 기기 등에서 동작하는 프로그램을 만들 때 사용하는 언어는 매우 다양합니다. 그 중에서 .NET Framework에서 동작하는 프로그램을 만들 때 가장 추천하는 언어는 C#입니다. 

  .NET Framework는 마이크로소프트 사에서 개발한 윈도우즈 프로그램 개발 및 실행 환경입니다. 개인용 컴퓨터 뿐만 아니라 다양한 스마트 기기에 설치하여 사용할 수 있습니다. 

 당연히 C# 언어를 이용하면 개인용 컴퓨터를 비롯하여 다양한 기기에서 동작 가능한 프로그램을 개발할 수 있습니다. (물론 우리나라에서 .NET Framework는 거의 Windows O/S를 탑재한 컴퓨터 환경입니다.) 

.NET Froawork 에는 공통으로 제공하는 라이브러리를 포함하며 효과적으로 개발할 수 있는 Visual Studio가 있어서 개발자 편의성이 뛰어납니다. 

 C# 언어를 이용하면 콘솔 화면에서 동작하는 간단한 응용 뿐만 아니라 사용자가 시각적인 컨트롤을 이용하여 프로그램을 사용하는 윈도우즈 응용 프로그램을 작성할 수 있습니다. 이 외에도 원격지에서 서비스를 사용할 수 있게 서비스 제공 및 이를 사용하는 프로그램을 개발할 수도 있으며 데이터베이스를 이용하는 응용이나 다양한 표준 프로토콜을 사용하는 네트워크 응용 프로그램이나 웹 사이트 제작 등을 할 수 있습니다.

  특히 .NET Framework에서는 다양하고 강력한 기술들을 제공하고 있어 손쉽게 프로그래밍할 수 있습니다. 

 이 책에서는 C# 언어에 관하여 다루고 있으며 콘솔 앱(.NET Framework) 프로젝트를 만들어 실습합니다. C#을 이용하여 만드는 다른 유형의 응용(: Windows Forms ) 프로그램을 개발하는 방법은 다루지 않습니다. 

[그림 1.1] .NET 프레임워크에서 동작하는 다양한 프로그램
[그림 1.1] .NET 프레임워크에서 동작하는 다양한 프로그램

1.1  .NET Framework 구조

 .NET Framework를 구성하는 핵심 요소는 CLR(Common Language Runtime, 공용 언어 런타임)입니다. CLR은 코드들을 관리하는 주요 역할을 담당합니다. CLR에 의해 관리하는 코드를 관리 코드라 부르며 형식 안전함을 보장합니다. CLR은 형식 안전함 외에 메모리 관리, 쓰레드 실행 및 코드 실행, 기타 시스템 서비스 등을 관리합니다. 

 .NET Framework에서는 CTS(Common Type System, 공용 형식 시스템)을 통해 견고한 코드를 보장하기 위해 형식에 관해 약속하고 있습니다. 또한 CLS(Common Language Specification, 공용 언어 사양)를 제시를 하여 자신이 만든 라이브러리를 다른 언어를 사용하는 개발자가 사용할 수 있는 지 점검해 줍니다. 

 이와 같은 특징으로 .NET 프레임워크에서 동작 가능한 프로그램은 C# 뿐만 아니라 F#, Visual Basic, C++(.NET 버전)로 생성한 코드와 상호 작용할 수 있습니다.

[그림 1.2] .NET Framework에서 소스 파일이 기계어로 번역하는 과정
[그림 1.2] .NET Framework에서 소스 파일이 기계어로 번역하는 과정

 

 C# 소스파일을 컴파일하면 C# 컴파일러가 .NET 어셈블리(.NET 프레임워크에서 동작 가능한 이진 파일)를 작성합니다. 그리고 이를 실행하면 .NET 프레임워크의 핵심 역할을 담당하는 CLR에 의해 .NET 어셈블리를 로드하고 Jitter(Just In Time Compiler)에 의해 MSIL(.NET 어셈블리내에 코드를 MSIL이라 부르며 CIL이라고도 부름)코드를 실제 운영체제에서 동작 가능한 기계어 명령으로 바꾸어 구동합니다. CLR은 이 외에도 참조하고 있는 다른 .NET 어셈블리를 로딩하는 작업과 .NET 공통 클래스 라이브러리를 사용하는 부분도 담당합니다.

[그림 1.3] .NET Framework에서 C# 프로그램 동작 구조
[그림 1.3] .NET Framework에서 C# 프로그램 동작 구조

 

1. 2 첫 번째 프로그램 “Hello, World

  이제 C# 언어 간단한 프로그램을 작성하여 기본 구조를 소개할게요. 

 작성할 프로그램은 콘솔 화면에 “Hello, World”를 출력하는 프로그램입니다. 이 책에서는 Microsoft Visual Studio 2022로 작성하는 방법을 소개할게요.

 Microsoft Visual Studio를 실행한 후 새 프로젝트 만들기를 선택하세요.

[그림 1.4] Visual Studio 2022에서 새 프로젝트 만들기
[그림 1.4] Visual Studio 2022에서 새 프로젝트 만들기

  새 프로젝트 만들기 창에서 C# 언어, 모든 플랫폼(P), 콘솔을 선택하여 나오는 템플릿 중에 콘솔 앱(.NET Framework)를 선택하여 다음 버튼을 클릭하세요. 이 책에서 만드는 프로젝트는 라이브러리를 제외하면 모두 콘솔 앱(.NET Framework)입니다.

[그림 1.5] 콘솔 앱(.NET Framework) 선택
[그림 1.5] 콘솔 앱(.NET Framework) 선택

 프로젝트 이름은 Hello World로 정할게요. 위치를 여러분들이 원하는 작업 폴더로 설정하여 관리하세요.

[그림 1.6] 프로젝트 이름 결정
[ 그림 1.6] 프로젝트 이름 결정

[그림 1.6] 프로젝트 이름 결정

  프로젝트에 Program.cs 소스 파일이 자동으로 만들어진 것을 확인할 수 있어요. 여기에서는 “Hello, World!”를 콘솔에 출력하기 위해 다음처럼 코드를 편집합시다.

using System;
 
namespace Hello_World
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello, World!");
        }
    }
}

   디어 그 유명한 "Hello, World" 프로그램을 완성했네요. 정상적으로 동작하는지 확인하기 위해 실행합시다. 실행은 Ctrl + F5(디버그 하지 않고 시작) 혹은 F5(디버깅 시작)로 할 수 있습니다. 

▶ 실행 결과

Hello, World!

 

1.2.1 주석

  다음은 Hello, World! 프로그램의 소스 코드입니다. 주석을 소개하기 위해 추가로 작성하였습니다.

  주석은 개발자가 코드를 이해하기 쉽게 작성한 설명입니다. 주석은 컴파일러에 의해 번역하지 않으며 단순히 개발자가 코드를 분석하기 위해 작성한 것이죠. C#에서도 C언어나 C++처럼 한 줄 주석에는 //를 사용하고 특정 영역을 주석으로 만들 때는 영역의 시작에 /*를 영역의 끝에 */를 사용합니다. 이 외에 XML 주석을 제공하고 있는데 ///로 시작한 부분입니다.

/*
 * 제목: Hello, World
 * 개요: 콘솔 화면에 "Hello, World!"출력
 */
using System;
 
namespace Hello_World
{
    internal class Program   
    {
        /// <summary>
        /// 프로그램 진입점
        /// </summary>
        /// <param name="args">프로그램 arguments 배열</param>
        static void Main(string[] args)
        {
            Console.WriteLine("Hello, World!");//콘솔 화면에 개행 문자와 함께 출력
        }
    }
}

[그림 1.7] 주석 설정과 해제하는 툴바 버튼
[ 그림&nbsp;1.7]&nbsp;주석 설정과 해제하는 툴바 버튼

 XML 주석을 사용하면 Visual Studio의 뛰어난 인텔리센스를 확인할 수 있어요.

[그림 1.8] Visual Studio의 인텔리센스
[ 그림&nbsp;1.8] Visual Studio의 인텔리센스

1.2.2 using System;

  진입점 Main 메서드에서 사용한 ConsoleSystem에 정의한 클래스입니다. 다른 이름 공간에 있는 것을 사용할 때 using 문을 통해 간단하게 사용할 수 있어요. 

 만약 using System; 문을 표현하지 않으면 Console을 사용하는 부분은 다음처럼 namespace도 같이 표현하여 사용합니다.

System.Console.WriteLine("Hello, World!");//콘솔 화면에 개행 문자와 함께 출력

 

1.2.3 namespace Hello_World

  C#의 모든 형식은 특정 namespace 공간에 정의하여야 합니다. 앞에서 설명한 Systemnamespace. Console 클래스가 System 이름 공간에 정의한 것입니다. 

 Visual Studio에서는 개발자가 정한 프로젝트 이름으로 namespace를 정합니다. 물론 명명 규칙에 따라 공백은 언더 바(_)로 바꾸는 등의 처리는 수행합니다. 

1.2.4 internal class Program 

 C# 프로그램에는 최소 한 개의 클래스가 있어야 하며 Visual Studio에서는 Program이름의 클래스를 자동 생성합니다. 

 클래스는 C# 언어에서 사용자 정의 형식을 만드는 방법의 하나이며 가장 강력하고 일반적으로 사용됩니다. 이 외에도 사용자 정의 형식을 만들기 위해 구조체와 열거형을 제공하고 있습니다. 이 책은 대부분 이들에 관한 설명으로 이루어진다고 볼 수 있어요.

1.2.5 static void Main(string[] args)

 Main은 프로그램의 진입점으로써 정적 메서드입니다. 개발자가 생각할 때 프로그램이 시작하는 곳입니다.

1.2.6 Console.WriteLine("Hello, World!"); 

 Console은 표준 입출력을 위해 제공하는 클래스입니다. 

 Console 클래스는 System namespace에 정의하고 있으며 공통 클래스 라이브러리 System.dll에 있습니다. 

 Console 클래스는 표준 출력, 표준 입력 및 오류 스트림을 나타내며 콘솔 응용 프로그램에서 입출력 작업을 위해 자주 사용됩니다. WriteLine은 표준 출력에 입력 인자로 전달한 문자열과 개행을 출력하는 정적 메서드입니다.

*디딤돌 C#은 2024년 1월 18일부터 Escort C#을 기반으로 다시 집필하는 책입니다. *

*상업적 사용은 허용하지 않으며 퍼가기 및 인용 시 출처를 밝혀주세요. *