Abstract

C#은 쓰기 편한 언어다. Visual Basic 밖에 쓸 줄 모르던 내가 본격적으로 C-Like 언어에 발딛게 한 언어인 만큼 (그리고 그만큼 다른 언어를 배울 수 있게 해 준 만큼) 애착이 강한 언어다.

중학교 2학년 이래로 쓰기 시작한지 벌써 10년이 다 되었다. 하지만 난 이 언어를 잘 쓸 수 있는지 여전히 의구심이 든다. 그래서 생각난 김에 블로그에 다시금 공부할 겸 어떻게 언어 입문에 관련한 연재라도 해야겠다 싶다. 근데 블로그에 널려있는 연재글들 보면 난 여전히 선택과 집중을 못하는 습성을 못버렸다. 어쩌겠나. 이게 내 습관이려니 하련다. 언젠가 고쳐지겠지 생각하며 노력해야지.

 

Expected Readers

이 연재는 프로그래밍에 대해 어느정도 감을 잡고 있되, C#이라는 언어 자체를 처음으로 시작하는 사람들을 위해 진행합니다. 따라서 처음 프로그래밍을 접하는 분이라면 그다지 추천드리지 않습니다.

 

Introduction

C#은 마이크로소프트가 개발한 범용 프로그래밍 언어입니다. 당시 MS가 야심차게 밀고 있던 .NET Framework라고 하는 소프트웨어 플랫폼 그 자체를 위해 C++과 Java의 특성을 결합하여 만들어냈습니다. 나온지 벌써 20년이 되었고, 현재  언어 자체만으로는 8.0버전까지 출시되어 있습니다. 

 

2010년 초반까지만 해도 .NET Framework는 윈도우 위에서만 돌아가는 물건이었고, 따라서 C# 역시 윈도우만을 위한 프로그래밍 언어였습니다. C# 자체의 유용함에 주목한 일부 사람들이 비 윈도우 환경에서 써보고자 모노라고 하는 프로젝트를 진행하기도 했지만(그리고 이것을 이용한 Unity Engine 등) 이것 역시 크로스플랫폼에서 사용하기에 그리 매력적이라고 보기는 어려웠습니다.

 

그러다 2014년 사티아 나델라 체제로 넘어가며 오픈소스를 사랑하게 된 MS는 11월에 돌연 .NET Core를 발표합니다. .NET Framework의 Windows 종속적인 부분을 걷어내며, 비 Windows 계열의 운영체제에서도 사용할 수 있도록 하는 오픈소스 프로젝트를 진행하고 있다는 파격적인 내용이었습니다. 이 말은 더 이상 C#과 .NET 인프라스트럭쳐를 사용하기 위해 윈도우를 사용할 필요가 없다는 이야기이며 .NET을 기반으로 하는 시스템을 구축하는데 비용을 줄일 수 있다는 이야기입니다. 다시 말해, 크로스플랫폼계의 본좌로 통하던 자바와 이제서야 본격적으로 경쟁할 수 있게 되었습니다.

 

2016년 6월 .NET Core 1.0을 시작으로 현재 완전한 .NET 표준 API인 .NET Standard는 2.1버전, 그리고 이를 기반으로 한 .NET Core는 3.1버전까지 출시되어 있습니다. 더불어 2020년 11월에는 .NET Core, .NET Framework 등 파편화되어있던 .NET 생태계가 .NET 5로 통합될 예정입니다. 앞으로 MS가 반 오픈소스 노선을 타는 등의 이변이 없는 한, .NET은 더욱 발전할 가능성이 무궁무진하며 그 중심을 지탱하는 C#이라는 언어는 더더욱 매력적인 언어가 될 것입니다.

 

Table of Contents

1. 개발환경 세팅하기 (Windows, non-Windows)

2. C# 프로그램의 기본 구조

3. 데이터타입

4. 변수 선언과 객체 생성

5. 프로그램의 제어

6. 필드, 프로퍼티, 메서드

7. 델리게이트와 이벤트

8. 클래스, 구조체, 인터페이스

9. OOP와 C#

10. 어트리뷰트

11. 제너릭

12. LINQ와 람다

13. 스레드와 동시성

14. 비동기

15. 전처리기

 

PostScript

챕터 하나하나는 해당 주제에 대해 최대한 자세하게 설명하려고 노력했습니다. 따라서 해당 챕터의 내용을 완전히 이해하지 못했다면 다음 챕터의 이해에 다소 어려움이 따를 수 있습니다.

 

일단은 현재 C#을 쓰기 위해 어느정도 알아두면 좋을 것 같은 내용들을 난이도별로 세심하게 배치해보려 노력했습니다. 이보다 조금 더 응용된 내용들(소켓 프로그래밍, unsafe 및 P/Invoke, ASP.NET Core, 데이터베이스 처리 등)은 본 연재가 끝난 뒤 추가적으로 연재할 때 다뤄보도록 하겠습니다.