티스토리 뷰

책표지

 

C#의 강력한 기능과 편의성에 비해 정규화된 서적은 부족한 편이다. 

C/C++은 프로그래밍의 기초라는 명분으로 수많은 서적들이 A to Z로 매년 양산되고 있지만 C#은 그렇지 못했다. 적은 서적들 수에 비해 좋지 못한 책들이 잔뜩 박힌 식빵속 건포도 같은 존재들이 상당했음을 알 수 있었다. 오히려 좋은 서적의 수가 적어서 인지 책 추천은 참 쉬운 편이였다. (추천할 서적이 몇없어서)

 

번역서는 여럿 있지만 친절한 입문서는 구하기 힘든편이였는데 이렇게 스탭바이스탭으로 구성된 입문서가 나오게 되었다. C#을 바라보는 시선들은 다양하지만 확실한 것은 실무에서 상당히 많이 쓰인다는 것이다. 언어라는 것은 그 용도의 성질과 쓰임에 따라 적재적소에 사용하면 되는 것이기 때문에 다른 언어와 비교하며 스펙 싸움을 할 필요가 없다.

 

책 부제목에 적힌 -처음부터 끝까지 입문자를 배려한 C#입문서- 라는 말이 무색하지 않게 너무 '기초적이지 않나' 하는 부분부터 시작하다 보면,  어느새 산 정상에 다다르는 느낌으로 집필된 서적이다. C#의 활용도는 정말 무궁무진하다. ASP를 활용해 웹프로그래밍을 할 수도 있고 유니티를 통해 게임 등을 개발할 수도 있다. 어떻게 사용하느냐에 따라 정말 편리하고 강력한 언어이다. 특히 지속적인 업데이트를 통해 변화하는 모습을 보고 있노라면 마치 앱게임을 하는 듯 하다.

 

백번 말하는 것보다 한 번 목차를 살펴보는 것이 책 평가에 좋다.

...더보기

CHAPTER 1 프로그래밍을 시작합시다

__1.1 프로그래밍 언어의 역사 

__1.2 비주얼 스튜디오 설치하기 

 

CHAPTER 2 처음 만드는 C# 프로그램

__2.1 Hello, World! 

__2.2 첫 번째 프로그램 뜯어보기 

__2.3 CLR에 대하여 

__연습 문제 

 

CHAPTER 3 데이터 보관하기

__3.1 데이터에도 종류가 있다 

__3.2 변수 

__3.3 값 형식과 참조 형식 

__3.4 기본 데이터 형식 

__3.5 상수와 열거 형식 

__3.6 Nullable 형식 

__3.7 var: 데이터 형식을 알아서 파악하는 똑똑한 C# 컴파일러 

__3.8 공용 형식 시스템 

연습 문제 

 

APPENDIX A 문자열 다루기

__A.1 문자열 안에서 찾기 

__A.2 문자열 변형하기 

__A.3 문자열 분할하기 

__A.4 문자열 서식 맞추기 

 

CHAPTER 4 데이터를 가공하는 연산자

__4.1 C#에서 제공하는 연산자 둘러보기 

__4.2 산술 연산자 

__4.3 증가 연산자와 감소 연산자 

__4.4 문자열 결합 연산자 

__4.5 관계 연산자 

__4.6 논리 연산자 

__4.7 조건 연산자 

__4.8 널 조건부 연산자 

__4.9 비트 연산자 

__4.10 할당 연산자 

__4.11 Null 병합 연산자 

__4.12 연산자의 우선순위 

연습 문제 

 

CHAPTER 5 코드의 흐름 제어하기

__5.1 분기문 

__5.2 반복문 

__5.3 점프문 

연습 문제 

 

CHAPTER 6 메소드로 코드 간추리기

__6.1 메소드란? 

__6.2 return에 대하여 

__6.3 매개 변수에 대하여 

__6.4 참조에 의한 매개 변수 전달 

__6.5 메소드의 결과를 참조로 반환하기 

__6.6 출력 전용 매개 변수 

__6.7 메소드 오버로딩 

__6.8 가변길이 매개 변수 

__6.9 명명된 매개 변수 

__6.10 선택적 매개 변수 

__6.11 로컬 함수 

연습 문제 

 

CHAPTER 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 구조체 

__7.17 튜플 

연습 문제 

 

CHAPTER 8 인터페이스와 추상 클래스

__8.1 인터페이스의 선언 

__8.2 인터페이스는 약속이다 

__8.3 인터페이스를 상속하는 인터페이스 

__8.4 여러 개의 인터페이스, 한꺼번에 상속하기 

__8.5 추상 클래스: 인터페이스와 클래스 사이 

연습 문제 

 

CHAPTER 9 프로퍼티

__9.1 public 필드의 유혹 

__9.2 메소드보다 프로퍼티 

__9.3 자동 구현 프로퍼티 

__9.4 프로퍼티와 생성자 

__9.5 무명 형식 

__9.6 인터페이스의 프로퍼티 

__9.7 추상 클래스와 프로퍼티 

연습 문제 

 

CHAPTER 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 인덱서 

__10.10 foreach가 가능한 객체 만들기 

연습 문제 

 

CHAPTER 11 일반화 프로그래밍

__11.1 일반화 프로그래밍이란? 

__11.2 일반화 메소드 

__11.3 일반화 클래스 

__11.4 형식 매개 변수 제약시키기 

__11.5 일반화 컬렉션 

__11.6 foreach를 사용할 수 있는 일반화 클래스 

연습 문제 

 

CHAPTER 12 예외 처리하기

__12.1 예외에 대하여 

__12.2 try~catch로 예외 받기 

__12.3 System.Exception 클래스 

__12.4 예외 던지기 

__12.5 try~catch와 finally 

__12.6 사용자 정의 예외 클래스 만들기 

__12.7 예외 필터하기 

__12.8 예외 처리 다시 생각해보기 

연습 문제 

 

CHAPTER 13 대리자와 이벤트

__13.1 대리자란? 

__13.2 대리자는 왜, 그리고 언제 사용하나요? 

__13.3 일반화 대리자 

__13.4 대리자 체인 

__13.5 익명 메소드 

__13.6 이벤트: 객체에 일어난 사건 알리기 

__13.7 대리자와 이벤트 

연습 문제 

 

CHAPTER 14 람다식

__14.1 람다식, 너는 어디에서 왔니? 

__14.2 처음 만나는 람다식 

__14.3 문 형식의 람다식 

__14.4 Func와 Action으로 더 간편하게 무명 함수 만들기 

__14.5 식 트리 

__14.6 식으로 이루어지는 멤버 

연습 문제 

 

CHAPTER 15 LINQ

__15.1 데이터! 데이터! 데이터! 

__15.2 LINQ의 기본: from, where, orderby, select 

__15.3 여러 개의 데이터 원본에 질의하기 

__15.4 group by로 데이터 분류하기 

__15.5 두 데이터 원본을 연결하는 join 

__15.6 LINQ의 비밀과 LINQ 표준 연산자 

연습 문제 

 

CHAPTER 16 리플렉션과 애트리뷰트

__16.1 리플렉션 

__16.2 애트리뷰트 

연습 문제 

 

CHAPTER 17 dynamic 형식

학습 목표 

__17.1 dynamic 형식 소개 

__17.2 COM과 .NET 사이의 상호 운용성을 위한 dynamic 형식 

__17.3 동적 언어와의 상호 운용성을 위한 dynamic 형식 

 

CHAPTER 18 파일 다루기

__18.1 파일 정보와 디렉토리 정보 다루기 

__18.2 파일을 읽고 쓰기 위해 알아야 할 것들 

__18.3 이진 데이터 처리를 위한 BinaryWriter/BinaryReader 

__18.4 텍스트 파일 처리를 위한 StreamWriter/StreamReader 

__18.5 객체 직렬화하기 

 

CHAPTER 19 스레드와 태스크

__19.1 프로세스와 스레드 

__19.2 Task와 Task<TResult>, 그리고 Parallel 

__19.3 async 한정자와 await 연산자로 만드는 비동기 코드 

 

CHAPTER 20 WinForm으로 만드는 사용자 인터페이스

__20.1 도대체 무슨 일이 일어나고 있는 걸까? 

__20.2 C# 코드로 WinForm 윈도우 만들기 

__20.3 Application 클래스 

__20.4 윈도우를 표현하는 Form 클래스 

__20.5 폼 디자이너를 이용한 WinForm UI 구성 

__20.6 사용자 인터페이스와 비동기 작업 

 

CHAPTER 21 네트워크 프로그래밍

__21.1 네트워크 프로그래밍에 앞서 알아둬야 할 기초 

__21.2 TcpListener와 TcpClient 

__21.3 흐르는 패킷 

 

CHAPTER 22 가비지 컬렉션

__22.1 가비지 컬렉터를 아시나요? 

__22.2 개처럼 할당하고 정승처럼 수거하라 

__22.3 세대별 가비지 컬렉션 

__22.4 가비지 컬렉션을 이해했습니다. 우리는 뭘 해야 하죠? 

(에디터가 바뀌고 접기 기능을 사용할줄 몰라서 펼쳐져 있는 것.)

 

 

어떻게 보면 다른 언어들과 다를바 없이 평이하다못해 진부한 구성으로 보일지 모르겠지만. 가장 중요한 부분은 객체지향 개발론이다. 객체지향 언어인 C#을 객체 중심으로 구성하여 풀이하고 있고 클레스, 인터페이스, 프로퍼티 등 C#에서 매우 중요한 부분들을 중점적으로 다루고 있기 때문에 절차지향 언어에 허덕였던 사람들이라면 다소 낯선 부분을 친절하게 익히는 계기가 되지 않을까 싶다. 

 

중반부를 지나 서서히 객체를 익혀 나가고 사용하는 내용에 접어들기 시작하면서부턴 학습 속도가 더뎌질 수 있다. 학습양이라는 것은 종이장의 수로 평가되는 것이 아니다. 어떠한 내용을 학습하느냐 그리고 얼마나 잘 이해했느냐가 학습의 핵심이다. 고리타분한 이야기처럼 보이겠지만 고리타분한 이야기일 수록 사람들은 잊기 쉽고 중요히 여기지 않는다. 빨리 많은 양을 익히고 싶어하는데 중장기적으로 본다면, 입문서를 확실하게 익혀두는 것이 더많은 내용을 깊게 익힐 수 있는 지름길이라 말하고 싶다. 

 

개발은 당장의 구현보다 원론적이고 이론적인 내용이 더 중요하다. 구현은 누구나 할 수 있다. 

어떻게 구성하여 구현하느냐에 집중하자.

 

 

 

레이아웃 살펴보기

전반적으로 3도 혹은 2도 인쇄된 서적으로 한빛미디어에서 흔히 볼 수 있는 초록색상으로 구성되어 있다. 사진상으로는 글자색이 다르게 나오겠지만 주류 글자는 검정색이며 강조나 여타 다른 레이아웃들은 눈이 편안한 초록색으로 구성되어 있다. 

소스코드 설명과 실행결과가 나오는 부분이다.

줄번호가 적혀 있고 이후에 "[15]번 줄을 보면..."이라는 설명만 되어 있는 것보다 위와 같이 중요한 부분들은 정확히 가리키며 설명되어 있어 가시성이 좋다.

 

책 내용 넣어도 되..나?

일반적인 구성요소는 위와 같다. 적절한 레이아웃 구성으로 지루하지 않다. 글덩어리의 책들보다 나는 이런 서적들이 좋다. 이후에는 필요한 부분을 바로바로 찾아보고 사용할 수 있어 한 번 익히고 난 뒤에도 계속 찾게 된다.

 

 

 

 

빠질 수 없는 연습문제, 책은 쳐다보고 구경하는 것이지만 연습은 체득이다. 중간중간 제공되는 연습문제를 풀어보자.

축구경기를 구경하고 평가하는 것과 실제로 뛰어보는 것은 상당히 다르다.

 

 

 

 

 

 

 

 

 

 

 

 

깜박하고 빠트렷던 학습순서

이런 내용들로 보았을때 본 입문서가 대학전공서적으로서 활용되기를 바라는 모습을 확인할 수 있다.

실제로 대학 전공 서적으로 활용되기에 충분한 서적이다.

 

 

 

 

 

책을 처음 펴보면

사실 책을 처음 펴보면 언제나 있는 설치과정과 역사에 대한 이야기. C#에 대한 이야기를 살펴보기 바란다.

 

 

 

 

총평 (★★★★☆)

국내 C# 입문서중 가장 훌륭하지 않았나 싶다. 사실 입문서를 다양하게 보지 않았음에도 불구하고 이렇게 말하는 이유는  본 한 권만으로도 충분히 훌륭한 입문서라 판단내릴 수 있기 때문이다. 굉장히 스텐다드한, 표준적인 서적으로 구태여 다른 책들과 비교할 필요가 없다. 자신이 C#에 대해 익히고 싶고 객체지향의 정수를 맛보고 싶다면 고민하지 말고 본책을 처음부터 끝까지. 정독하길 바란다. 군더더기 없이 필요한, 핵심적인 내용들로 잘 구성되어 있다.

 

이후에는 자신이 원하는 개발방향으로 나아갈 서적들을 선정하여 익히면 될성 싶다. C#으로 무언가를 하고 싶다면, "C#을 활용한.."으로 시작하는 책이라던가 "C# 기반의..." 라는 서적들을 찾아보아도 좋고 중급서를 활용해 조금더 진득한 C# 활용법을 익히는 것도 좋으리라 생각된다. 너무 이론적인 내용만 파고든다면 흥미를 잃기 쉬우니 C#을 활용한 다양한 프로그래밍을 경험해 보았으면 좋겠다.

 

 

 

※ 해당 리뷰는 출판사 한빛미디어의 한빛리더스를 통해 무상제공된 도서를 제공받아 어떠한 압력없이 자율 서술된 주관적인 리뷰입니다. 

댓글