뇌를 자극하는 C# 5.0 프로그래밍
"시작이 반"이라는 유명한 경구가 있다. 어떤 일을 하든, 일단 시작을 하면 절반을 끝낸 것과 같다는 말이고 다르게 해석하면 무슨 일이라도 시작이 가장 어렵다는 말이기도 하다. 프로그래밍도 시작이 가장 어렵다. 컴퓨터 프로그래밍을 처음 시작하는 사람은 프로그래밍 언어가 무엇인지, 어떤 이유로 탄생했고 현재 어떻게 쓰이고 있으며 어떻게 입문해야 하는지 알지 못한다.
이 책은 이런 관점에서 독자의 가려운 부분을 잘 긁어 준다. C# 언어의
컴퓨터를 배우면서 처음에는 C를 접했고 점점 많은 언어를 접하기 시작했다.
C다음 C++ 다음에 C#이 될줄 알았지만 Java 그다음에 C#을 갈줄 알았지만 Javascript그 다음에 C#를 갈줄 알았지만 WOW(월드 오브 워크래프트)때문에 Lua…
간단하게 만져볼 수 있었던 언어는 많았지만 서로 포팅 가능할 정도로 연습한 것들은 위의 것이 전부다.
드디어 돌고 돌아 마침내 C#레퍼런스 북을 만지게 된 이날이 왔다!!
역시 처음 언어를 시작할때는 ‘한글’로 된 레퍼런스 북이 좋다. 이 책. 전 판인 ‘뇌를 자극하는 C# 4.0 프로그래밍’보다 책이 좀 작다. 4.0 -> 5.0으로 넘어가면 좀더 커져야 되는거 아닌가 내용도 추가 됬을텐데..
C는 프로그램을 배우는 사람이라면 알다시피 다음버전인 C++과는 어느정도 호환이 되지만 C#과는 전혀 호환이 되지 않는다. 제작자 본인도 아쉬워하지만 계보를 따르자면 많은 기존 언어들의 장점을 넣은 진보된 언어다.
2027861890.jpg
그림 : C# 너는 어디쯤 왔니? 이 뒤에 수많은 언어들이 존재하지만 들어보기만 했을뿐 만져본적도 없다.
대부분의 상위권 언어들은 C를 기반으로 한 언어를 채택하고 있고(자바는 VM이 C로 제작됬으니) 뒤이어 스크립트 언어들이 따르고 있다.
1. 책을 소개하기에 앞서 C# 4.0 -> 5.0은 책의 버전이 높아진게 아니다!
"뇌를 자극하는 C# 5.0 프로그래밍"의 5.0은 책의 버전을 말하는게 아니라 레퍼런스와 라이브러리를 추가한 C#에서 지원하는 언어적 기능이 늘었다는것을 의미한다. C#은 상당히 진보된 언어적 패러다임을 가지는데 기존에 가독성 좋고 간단하게 지원하는 기능이 많은 언어들의 장점들을 합쳐서 인지 간단한코딩에서도 대부분의 기능을 동작하게 할 수 있다. 또한 무의미한 코드를 줄이기 위해 람다(Lamda)함수를 지원하였는데 가독성은 조금 떨어지지만 사용하면 코드가 좀더 간편해지는걸 느낄 수 있따. 하지만 역시나 너무 복잡한 코딩은 같이 일하는사람의 난독증을 유발시킬수 있으니 주의해야겠다.
신기하게 생각했던 get, set, ???,은 2.0에서 추가되었고 5.0에선 비동기 메서드를 지원한다. 사실 스크립트 언어인 javascript가 부러웠던것은 간단하게 비동기를 구현할수 있다는것이었는데 C#은 자체 라이브러리로 안전하게 사용하게 만들었다. 대단한걸?
당연하게도 책에는 위에 변경사항들이 모두 포함되있다.
목차
1장 프로그래밍을 시작합시다
1.1 프로그래밍 언어의 역사
1.2 비주얼 스튜디오 익스프레스 설치하기
2장 처음 만드는 C# 프로그램
2.1 Hello, World!
2.2 첫 번째 프로그램 뜯어보기
2.3 CLR에 대하여
연습문제
3장 데이터 보관하기
3.1 데이터에도 종류가 있다
3.2 변수
3.3 값 형식과 참조 형식
3.4 기본 데이터 형식
3.5 상수와 열거 형식
3.6 Nullable 형식
3.7 var: 데이터 형식을 알아서 파악하는 똑똑한 C# 컴파일러
3.8 공용 형식 시스템
연습문제
4장 데이터를 가공하는 연산자
4.1 C#에서 제공하는 연산자 둘러보기
4.2 산술 연산자
4.3 증가 연산자와 감소 연산자
4.4 문자열 결합 연산자
4.5 관계 연산자
4.6 논리 연산자
4.7 조건 연산자
4.8 비트 연산자
4.9 할당 연산자
4.10 연산자의 우선순위
연습문제
5장 코드의 흐름 제어하기
5.1 분기문
5.2 반복문
5.3 점프문
연습문제
6장 메소드로 코드 간추리기
6.1 메소드란?
6.2 return에 대하여
6.3 매개 변수에 대하여
6.4 참조에 의한 매개 변수 전달
6.5 출력 전용 매개 변수
6.6 메소드 오버로딩
6.7 가변길이 매개 변수
6.8 명명된 매개 변수
6.9 선택적 매개 변수
연습문제
7장 클래스
7.1 객체 지향 프로그래밍과 클래스
7.2 클래스의 선언과 객체의 생성
7.3 객체의 삶과 죽음에 대하여: 생성자와 소멸자
7.4 정적 필드와 메소드
7.5 객체 복사하기: 얕은 복사와 깊은 복사
7.6 this 키워드
7.7 접근 한정자로 공개 수준 결정하기
7.8 상속으로 코드 재활용하기
7.9 기반 클래스와 파생 클래스 사이의 형식 변환, 그리고is 와 as
7.10 오버라이딩과 다형성
7.11 메소드 숨기기
7.12 오버라이딩 봉인하기
7.13 중첩 클래스
7.14 분할 클래스
7.15 확장 메소드
7.16 구조체
연습문제
8장 인터페이스와 추상 클래스
8.1 인터페이스의 선언
8.2 인터페이스는 약속이다
8.3 인터페이스를 상속하는 인터페이스
8.4 여러 개의 인터페이스, 한꺼번에 상속하기
8.5 추상 클래스: 인터페이스와 클래스 사이
연습문제
9장 프로퍼티
9.1 public 필드의 유혹
9.2 메소드보다 프로퍼티
9.3 자동 구현 프로퍼티
9.4 프로퍼티와 생성자
9.5 무명 형식
9.6 인터페이스의 프로퍼티
9.7 추상 클래스와 프로퍼티
연습문제
10장 배열과 컬렉션, 그리고 인덱서
10.1 All for one, one for all
10.2 배열을 초기화하는 세 가지 방법
10.3 알아두면 삶이 윤택해지는 System.Array
10.4 2차원 배열
10.5 다차원 배열
10.6 가변 배열
10.7 컬렉션 맛보기
10.8 인덱서
10.9 foreach가 가능한 객체를 만들기
연습문제
11장 일반화 프로그래밍
11.1 일반화 프로그래밍이란?
11.2 일반화 메소드
11.3 일반화 클래스
11.4 형식 매개 변수 제약시키기
11.5 일반화 컬렉션
11.6 foreach를 사용할 수 있는 일반화 클래스
연습문제
12장 예외 처리하기
12.1 예외에 대하여
12.2 try~catch로 예외 받기
12.3 System.Exception 클래스
12.4 예외 던지기
12.5 try~catch와 finally
12.6 사용자 정의 예외 클래스 만들기
12.7 예외 처리 다시 생각해보기
연습문제
13장 델리게이트와 이벤트
13.1 델리게이트란?
13.2 델리게이트는 왜, 그리고 언제 사용하나요?
13.3 일반화 델리게이트
13.4 델리게이트 체인
13.5 익명 메소드
13.6 이벤트: 객체에 일어난 사건 알리기
13.7 델리게이트와 이벤트
연습문제
14장 람다식
14.1 람다식, 너는 어디에서 왔니?
14.2 처음 만드는 람다식
14.3 문 형식의 람다식
14.4 Func와 Action으로 더 간편하게 무명 함수 만들기
14.5 식 트리
연습문제
15장 LINQ
15.1 데이터! 데이터! 데이터!
15.2 LINQ의 기본: from, where, orderby, select
15.3 여러 개의 데이터 원본에 질의하기
15.4 group by로 데이터 분류하기
15.5 두 데이터 원본을 연결하는 join
15.6 LINQ의 비밀과 LINQ 표준 연산자
연습문제
16장 리플렉션과 애트리뷰트
16.1 리플렉션
16.2 애트리뷰트
연습문제
17장 dynamic 형식
17.1 dynamic 형식 소개
17.2 COM과 .NET 사이의 상호 운용성을 위한 dynamic 형식
17.3 동적 언어와의 상호 운용성을 위한 dynamic 형식
연습문제
18장 파일 다루기
18.1 파일 정보와 디렉토리 정보 다루기
18.2 파일을 읽고 쓰기 위해 알아야 할 것들
18.3 이진 데이터 처리를 위한 BinaryWriter/BinaryReader
18.4 텍스트 파일 처리를 위한 StreamWriter/StreamReader
18.5 객체 직렬화하기
19장 스레드와 태스크
19.1 프로세스와 스레드
19.2 Task와 Task, 그리고 Parallel
19.3 async 한정자와 await 연산자로 만드는 비동기 코드
20장 WinForm으로 만드는 사용자 인터페이스
20.1 도대체 무슨 일이 일어나고 있는 걸까?
20.2 C# 코드로 WinForm 윈도우 만들기
20.3 Application 클래스
20.4 윈도우를 표현하는 Form 클래스
20.5 폼 디자이너를 이용한 WinForm UI 구성
20.6 사용자 인터페이스와 비동기 작업
21장 네트워크 프로그래밍
21.1 네트워크 프로그래밍에 앞서 알아둬야 할 기초
21.2 TcpListener와 TcpClient
21.3 흐르는 패킷
22장 가비지 컬렉션
22.1 가비지 컬렉터를 아시나요
22.2 개처럼 할당하고 정승처럼 수거하라
22.3 세대별 가비지 컬렉션
22.4 가비지 컬렉션을 이해했습니다. 우리는 뭘 해야 하죠?
역시나 GUI부분과 네트워크 프로그래밍이 마지막에 있는 좋은 책. 많은 사람들이 저부분을 읽지 않겠지만 편집상 어쩔수 없이 뒤로 가야한다는걸 머리론 이해하지만 마음이 가면 알아서 찾겠지?
그나마 책이 좀 작은게 위안이 되는데. 그래도 내용이 뺴곡한건 마찬가지다. 책은 줄었는데 4.0버전에 있던 내용은 어떻게 다 들어간건지 편집의 마술이다. 종이 사용 절감! 환경 보호!
2. 책의 속을 파헤쳐보자
일단 내용자체의 설명이 나쁘거나 한점은 없다 압도적인 양의 예제에 이걸 언제 다 실행시켜 볼까 하는 생각은 들지만. 예제를 모두 실행해보는데 20시간 정도 걸린것 같다. 예제가 너무 얌전하니까. 쓰는법은 익히겠느데 어디다 써야될지는 모르겠고. 이걸 이용해서 무언가를 만들다 보면 뻥 터지는건 이 책이 아니라 MSDN과 Stackoverflow가 가르쳐줄꺼다.
탄탄한 실용 예제 그리고 예상되는 문제점들을 잘 정리한게 이 레퍼런스 북의 장점이다.
그리고 프로그래머라면 좋아할만한 깨알같은... 예제가 많다
다만 문제는 Delegate와 Lamda부턴데...
Lamda 챕터가 지나고 난뒤 Lamda를 이용한 코딩이 보이기 시작한다. 하지만 이게 레퍼런스북을 보는 사람이라면 알겠지만 처음 봤을때는 가독성이 떨어진다. 다시 이 코드를 이해하기 위해 책을 뒤로 펼쳐야 하는것도 그렇고. Lamda는 분명 효율적이고 좋은 식이지만 연관되지 않은 각각의 챕터는 분리되어야 된다고 생각한다. Delegate를 사용한 식들은 좀더 편한 레퍼런스를 제공하지만 Delegate가 어떻게 이용되는지 써야되는데.. 그게 없네. 후반에 중요한 레퍼런스를 설명하니 만큼 이부분은 조금 간단하게 풀어써주었으면 한다. 갑자기 여러가지 복합적인 개념을 접목시키기엔 예제를 보아도 정확히 이해하지 좋아보이진 않는다.
3. 마무으리
좋은책
제 점수는요... 5.0만점에 4.5? 레퍼런스북으로 충분히 기능을 하고 오역이나 오탈자도 적다. 책이 작아져 무게도 감소했으니 전투력은 감소했지만 충분히 하나 벽장에 넣어두고 보기엔 좋은책. 다만 C#6.0이 나온다면...