소프트웨어 공학의 역사를 통틀어 컴퓨터 프로그램을 작성하는 데 사용된 방법론은 몇 번의 패러다임의 전환을 거치면서 각 전환기마다 코드 구조를 향상시키고 복잡성을 줄이는 식으로 다음의 전환에 대한 토대를 이뤄왔다.
처음 몇 장에서는 구문이 작성된 순서대로 실행되는 순차 프로그래밍 구조를 살펴본다. 이런 모델에 내포된 문제는 요구 사항이 증가함에 따라 복잡성이 기하급수적으로 증가한다는 점이다. 이런 복잡성을 줄이려면 코드 블록을 메소드로 옮기는 구조화된 프로그래밍 모델을 만들면 된다. 이 모델을 사용하면 프로그램 내의 여러 위치에서 코드 중복 없이 동일한 코드 블록을 호출할 수 있다. 하지만 이런 구조도 곧 커져가는 프로그램의 통제로 인해 한계에 부딪혔고 추상화를 더 필요로 했다. 5장에서 설명한 객체지향 프로그래밍은 이런 상황을 바로 잡기 위해 등장했다. 뒤이은 장들에서 인터페이스 기반 프로그래밍과 LINQ(그리고 이를 컬렉션 API로 만든 변환), 특성을 통한 기본적인 선언형 프로그래밍 형식(17장)과 같은 추가적인 방법론을 배운다.
이 책의 주요 장점은 다음 세 가지다.
- C# 언어에 대해 포괄적으로 다루면서 단순한 학습서 수준을 넘어 효과적인 소프트웨어 개발 프로젝트를 시작할 수 있는 토대를 제공한다.
- 이미 C#에 익숙한 독자의 경우 더 복잡한 프로그래밍 패러다임에 대한 통찰력을 제공하며, C# 6.0과 닷넷 프레임워크 4.6의 가장 최신 버전에서 소개한 기능을 상세히 다룬다.
- 이 책은 시간이 지나도 변치 않는 참고서로서, C#에 충분히 익숙해진 이후에도 여전히 유용하다.
C# 학습에 성공하려면 가능한 한 빨리 코드부터 작성해야 한다. 이론적으로 완전히 무장할 때까지 기다릴 필요가 없다. 바로 소프트웨어를 작성해보는 것이 좋다. 반복 개발의 신봉자처럼 나는 이 책을 통해 초보 프로그래머일지라도 2장의 말미에서 기본 C# 코드 작성을 시작할 수 있기를 바란다.
이 책에서 많은 주제를 다루지는 않는다. ASP 닷넷, 엔티티 프레임워크, WPF와 같은 스마트 클라이언트 개발, 분산 프로그래밍 등과 같은 주제까지 다루지는 않는다. 이들 주제가 닷넷 프레임워크와 관련이 있지만, 이들을 다루려면 각 주제별로 책 한 권이 따로 필요할 정도다. 다행히 애디슨웨슬리 출판사의 닷넷 개발 시리즈에는 이러한 주제를 다룬 책이 여럿 있다. 이 책은 C#과 기본 클래스 라이브러리 내의 형식에 초점을 맞춘다. 이 책을 읽으면 다른 시리즈에서 다루는 영역에 대한 전문성을 개발하는 데 필요한 준비를 마칠 수 있다.
소프트웨어 공학의 역사를 통틀어 컴퓨터 프로그램을 작성하는 데 사용된 방법론은 몇 번의 패러다임의 전환을 거치면서, 코드 구조를 향상시키고 복잡성을 줄여왔다. 이 책은 이러한 동일한 패러다임 전환을 따른다.
처음 몇 장에서는 구문이 작성된 순서대로 실행되는 순차 프로그래밍 구조(sequential programming structure)를 살펴본다. 이런 모델에 내포된 문제는 요구사항이 증가함에 따라 복잡성이 기하급수적으로 증가한다는 점이다. 이런 복잡성을 줄이려면 코드 블록을 메서드로 옮기는 '구조화된 프로그래밍 모델(structured programming model)'을 만들면 된다. 이 모델을 사용하면 프로그램 내의 여러 위치에서 코드 중복 없이 동일한 코드 블록을 호출할 수 있다. 하지만 이런 구조도 빠르게 커져가는 프로그램의 통제에 한계에 부딪혔고 추상화를 더 필요로 했다. 6장에서 설명한 객체 지향 프로그래밍은 이런 상황을 바로잡기 위해 등장했다. 이후의 장들에서 인터페이스 기반 프로그래밍과 LINQ(그리고 이를 컬렉션 API로 만든 변환), 특성을 통한 선언형 프로그래밍의 기본 형식(18장)과 같은 추가적인 방법론을 배운다.
C# 학습에 성공하려면 가능한 한 빨리 코드부터 작성해야 한다. 이론적으로 완전히 무장할 때까지 기다릴 필요가 없다. 바로 소프트웨어를 작성하는 것이 좋다. 반복 개발의 신봉자처럼, 나는 이 책을 읽으면서 입문자라도 2장의 끝에서는 기본 C# 코드 작성을 시작하길 바란다.
이 책에서 많은 주제를 다루지는 않는다. ASP.NET과 Entity Framework, 자마린(Xamrin), 스마트 클라이언트 개발, 분산 프로그래밍 등과 같은 주제는 다루지 않는다. 이들 주제가 .NET 프레임워크와 관련이 있지만 이들을 다루려면 각 주제별로 책 한 권이 따로 필요하기 때문에 C#과 기본 클래스 라이브러리 내의 형식에 초점을 맞춘다. 이 책을 읽으면 다른 시리즈에서 다루는 영역에서 전문성을 개발하는데 필요한 준비를 할 수 있을 것이다.