새로운 객체 지향 언어들이 나오면서 소멸될 줄 알았던 C++는 요즘도 널리 쓰이고 있는데, 이는 C++의 성능이 우수하며 유지보수하기가 쉽기 때문이다. 또한 C++는 캡슐화, 상속성, 다형성을 지원하므로 객체 지향 언어의 3대 개념을 만족한다. 하지만 대부분의 개발 입문자들이 C++는 어려운 언어라는 생각을 많이 한다. 포인터(*)와 주소 연산자(&)의 사용법이 매우 까다롭기 때문이다.
그러나 C#은 어렵게 여기는 C++의 포인터(*)와 주소 연산자(&)를 제거하여 쉽게 사용할 수 있도록 했으며, C++의 좋은 점을 많이 갖고 있어서 강력하고도 쉬운 언어가 되었다. 요즘 MFC나 VB로 작성하던 게임 프로그램을 C#으로 작성하고 있을 정도로 사용 범위가 많이 넓어졌다. 핸드 헬드 디바이스(Hand Held Device)와 차량용 네비게이션부터 게임 프로그래밍, 윈도우 프로그래밍, 웹 서비스, SOA, 웹 프로그래밍 등 사용 용도가 다양해지면서 사용량도 증가하고 있다. C#의 버전(1, 1.1, 2, 3, 3.5)이 높아질수록 기능과 사용량 모두 증가하고 있다. 특히 Visual Studio 2008(닷넷 3.5)에 WCF, WPF, LINQ 등 새로운 기능들이 추가된 덕분에 C#은 더욱 강력해졌다.
문법은 외울 수 있지만, 응용력은 외운다고 길러지는 것이 아니다. 기본 원리를 이해하고 응용 방법을 지속적으로 학습해야 한다. 이 책에서는 활용할 수 있는 예제를 단순한 것부터 복잡한 것까지 단계별로 제시한다. 처음에는 문법과 기본 타입이 많지만 뒤로 갈수록 객체 지향 특징을 많이 만날 수 있다. 설명한 문법을 응용하여 문제를 해결하도록 했으며, 코딩의 양을 늘려가면서 복잡한 것도 소화할 수 있도록 조절하였다. 기본 문법을 익힐 때에도 소수, 완전수, 약수, 진수, 버블 정렬을 통하여 간단한 코딩 방법과 응용 방법을 익히도록 했다.
로또, 야구, 카드, 마방진, 주식, RSA 등 재미를 느끼면서 공부할 수 있는 예제, 정렬(선택, 퀵, 삽입), 재귀(팩토리얼, 최대공약수, 최소공약수, 퍼뮤테이션(순열), 콤비네이션(조합), 퀵, 황금비) 등과 같은 중요한 로직도 쉽게 익힐 수 있도록 구성하였다. 컬렉션과 제네릭을 이용한 카드놀이, 계층 구조를 이용한 만능마방진 등 실무에서 사용할 수 있는 예제를 넣었다. 그리고 시계, 카드, 야구, 채팅, 메모장, 웹 브라우저, 바이오리듬, 서울/부산 지하철 최단거리 등 응용 결과를 Windows 응용 프로그램으로 확인할 수 있도록 하여 응용력과 개발 동기, 재미를 통하여 로직에 친숙해지도록 하였다. 또한 부록에 DB 설치 방법, 19가지의 SQL 쿼리, LINQ를 이용한 학생 관리 DB 프로그래밍, 카드 게임을 활용한 블랙잭, 16 퍼즐, 같은 그림 맞추기, 고스톱 등 활용 방법 등을 풍부하게 넣었다.
이 책의 예제에는 순열, 조합, 기약분수, 복소수, 중간값 정리, 제곱근 등도 포함되어 있다. 수학이라면 치를 떠는 사람도 있겠지만 우리의 목표는 풀이 과정을 프로그램으로 바꾸는 것이다. 푸는 과정을 찾아서 순서대로 나열하고, 이를 프로그램으로 바꿀 줄 안다면 C# 뿐만 아니라 다른 언어를 배울 때도 중요한 능력을 습득하게 되는 것이다.
이전에 썼던 초보자를 위한 자바 200제, 초보자를 위한 C++ 200제에서도 강조했지만 총 코딩량이 10,000줄을 넘어야 응용력이 확장된다. 수년간 많은 학생을 지도해 보면서 확인한 생각이다. 무슨 일이든지 일정량이 축적되면 그 다음부터 고비를 쉽게 넘기거나 뜻밖의 아이디어가 떠오르는 경우가 있는데, 이는 C# 프로그래밍/코딩에서도 마찬가지이다. 보기 좋은 음식이 먹기도 좋다는 말은 코딩에도 그대로 적용된다. 누가 봐도 한눈에 알아볼 수 있도록 브레이스 열고 닫기, 다음 줄 탭 주기, 코딩 간격 등을 일정하게 유지하는 습관을 들이자. 보기 쉬운 코딩은 알기 쉬울 뿐더러 오류도 쉽게 찾을 수 있으므로 우선은 실력 향상, 시간이 지나면 우수한 개발자가 되는 밑거름이 된다.
--- '저자의 말' 중에서