이 책은 C#의 기본, 고급 문법과 더불어 기초 클래스 라이브러리까지 다루고 있다. 총 22개 장으로, 앞서 배운 내용을 활용하면서 단계별로 학습할 수 있도록 구성했다. 입문자의 눈높이에 맞춰 친절하게 설명한 핵심 문법을 익히며 프로그래밍 동작 원리를 이해하고, 예제 코드로 실습을 진행하며 실력을 향상시킬 수 있다. 또한, [비타민 퀴즈]와 [연습문제]를 통해 배운 내용을 스스로 점검하고 부족한 부분을 보완할 수 있다. 『이것이 C#이다(3판)』으로 C# 프로그래밍의 기본기를 탄탄하게 다지고, 전문가로 성장해 보자!
Contents
Chapter 01 | 프로그래밍을 시작합시다
1.1 프로그래밍 언어의 역사
__컴퓨터의 시작, 프로그래밍의 시작
__포트란의 탄생
__초등학생도 프로그래밍할 수 있게 한 베이직
__유닉스의, 유닉스에 의한, 유닉스를 위한 C
__C+1 == C++
__더 나은 세상을 위한 C#
1.2 C#의 기본 파일과 환경 설정
__프로그램을 이루는 소스 파일과 프로젝트
__비주얼 스튜디오 환경 설정
Chapter 02 | 처음 만드는 C# 프로그램
2.1 Hello, World!
2.2 첫 번째 프로그램 뜯어보기
__using System;
__using static System.Console;
__namespace Hello { }
__class MainApp { }
__// 프로그램 실행이 시작되는 곳
__static void Main(string[ ] args) { }
__if(args.Length == 0) { }
2.3 CLR에 대하여
[연습문제]
Chapter 03 | 데이터 보관하기
3.1 다양한 데이터의 종류
3.2 변수
3.3 값 형식과 참조 형식
__스택과 값 형식
__힙과 참조 형식
3.4 기본 데이터 형식
__숫자 데이터 형식
[Vitamin Quiz 3-1]
[Vitamin Quiz 3-2]
__부동 소수점 형식
__문자 형식과 문자열 형식
[Vitamin Quiz 3-3]
__논리 형식
__object 형식
__박싱과 언박싱
__데이터 형식 바꾸기
3.5 상수와 열거 형식
__상수: 전 언제나 변하지 않을 거예요
__열거 형식: 여러 개의 상수를 정리해요
3.6 Nullable 형식
3.7 var: 데이터 형식을 알아서 파악하는 똑똑한 C# 컴파일러
3.8 공용 형식 시스템
3.9 문자열 다루기
__문자열 안에서 찾기
__문자열 변형하기
__문자열 분할하기
__문자열 서식 맞추기
[연습문제]
Chapter 04 | 데이터를 가공하는 연산자
4.1 C#에서 제공하는 연산자 둘러보기
4.2 산술 연산자
4.3 증가 연산자와 감소 연산자
4.4 문자열 결합 연산자
4.5 관계 연산자
4.6 논리 연산자
4.7 조건 연산자
4.8 null 조건부 연산자
4.9 비트 연산자
__시프트 연산자
__비트 논리 연산자
4.10 할당 연산자
4.11 null 병합 연산자
4.12 연산자의 우선순위
[연습문제]
Chapter 05 | 코드의 흐름 제어하기
5.1 분기문
__if, else, else if
__if 문 중첩해서 사용하기
__switch 문
__switch 식
5.2 반복문
__while
__do while
__for
__중첩 for
__foreach
__for 또는 while을 이용한 무한 반복 코드
5.3 점프문
__break
__continue
__goto
5.4 패턴 매칭
__선언 패턴
__형식 패턴
__상수 패턴
__프로퍼티 패턴
[Vitamin Quiz 5-1]
__관계 패턴
__논리 패턴
__괄호 패턴
__위치 패턴
__var 패턴
__무시 패턴
__목록 패턴
[연습문제]
Chapter 06 | 메소드로 코드 간추리기
6.1 메소드란?
6.2 return에 대하여
6.3 매개변수에 대하여
6.4 참조에 의한 매개변수 전달
6.5 메소드의 결과를 참조로 반환하기
6.6 출력 전용 매개변수
6.7 메소드 오버로딩
6.8 가변 개수의 인수
6.9 명명된 인수
6.10 선택적 인수
6.11 로컬 함수
[연습문제]
Chapter 07 | 클래스
7.1 객체지향 프로그래밍과 클래스
[Vitamin Quiz 7-1]
7.2 클래스의 선언과 객체의 생성
7.3 객체의 삶과 죽음에 대하여: 생성자와 종료자
__생성자
__종료자
7.4 정적 필드와 메소드
7.5 객체 복사하기: 얕은 복사와 깊은 복사
7.6 this 키워드
__나
__this( ) 생성자
7.7 접근 한정자로 공개 수준 결정하기
7.8 상속으로 코드 재활용하기
7.9 기반 클래스와 파생 클래스 사이의 형식 변환
7.10 오버라이딩과 다형성
7.11 메소드 숨기기
7.12 오버라이딩 봉인하기
7.13 읽기 전용 필드
7.14 중첩 클래스
7.15 분할 클래스
7.16 확장 메소드
[Vitamin Quiz 7-2]
7.17 구조체
7.18 튜플
[연습문제]
Chapter 08 | 인터페이스와 추상 클래스
8.1 인터페이스의 선언
8.2 인터페이스는 약속이다
[Vitamin Quiz 8-1]
8.3 인터페이스를 상속하는 인터페이스
8.4 여러 인터페이스, 한꺼번에 상속하기
[Vitamin Quiz 8-2]
8.5 인터페이스의 기본 구현 메소드
8.6 추상 클래스: 인터페이스와 클래스 사이
[연습문제]
Chapter 09 | 프로퍼티
9.1 public 필드의 유혹
9.2 메소드보다 프로퍼티
9.3 자동 구현 프로퍼티
__자동 구현 프로퍼티 뒤에서 일어나는 일
9.4 프로퍼티와 생성자
9.5 초기화 전용 자동 구현 프로퍼티
9.6 프로퍼티 초기화를 강제하는 required 키워드
9.7 레코드 형식으로 만드는 불변 객체
__레코드 선언하기
__with를 이용한 레코드 복사
__레코드 객체 비교하기
9.8 무명 형식
9.9 인터페이스의 프로퍼티
9.10 추상 클래스의 프로퍼티
[연습문제]
Chapter 10 | 배열과 컬렉션 그리고 인덱서
10.1 All for one, one for all
10.2 배열을 초기화하는 세 가지 방법
10.3 알아두면 삶이 윤택해지는 System.Array
10.4 배열 분할하기
10.5 2차원 배열
[Vitamin Quiz 10-1]
[Vitamin Quiz 10-2]
10.6 다차원 배열
10.7 가변 배열
10.8 컬렉션 맛보기
__ArrayList
__Queue
__Stack
__Hashtable
10.9 컬렉션을 초기화하는 방법
10.10 인덱서
10.11 foreach가 가능한 객체 만들기
[연습문제]
Chapter 11 | 일반화 프로그래밍
11.1 일반화 프로그래밍이란?
11.2 일반화 메소드
11.3 일반화 클래스
11.4 형식 매개변수 제약시키기
[Vitamin Quiz 11-1]
11.5 일반화 컬렉션
__List〈T〉
__Queue〈T〉
__Stack〈T〉
__Dictionary〈TKey, TValue〉
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으로 더 간편하게 무명 함수 만들기
__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 리플렉션
__Object.GetType( ) 메소드와 Type 클래스
[Vitamin Quiz 16-1]
__리플렉션을 이용해서 객체 생성하기
__형식 내보내기
16.2 애트리뷰트
__애트리뷰트 사용하기
__호출자 정보 애트리뷰트
__내가 만드는 애트리뷰트
[연습문제]
Chapter 17 | dynamic 형식
17.1 dynamic 형식 소개
__덕 타이핑
17.2 COM과 .NET 사이의 상호 운용성을 위한 dynamic 형식
17.3 동적 언어와의 상호 운용성을 위한 dynamic 형식
Chapter 18 | 파일 다루기
18.1 파일 정보와 디렉터리 정보 다루기
__예제 프로그램: 디렉터리/파일 정보 조회하기
__예제 프로그램: 디렉터리/파일 생성하기
18.2 파일을 읽고 쓰기 위해 알아야 할 것들
__System.IO.Stream 클래스
[Vitamin Quiz 18-1]
18.3 실수를 줄여주는 using 선언
18.4 이진 데이터 처리를 위한 BinaryWriter/BinaryReader
[Vitamin Quiz 18-2]
18.5 텍스트 파일 처리를 위한 StreamWriter/StreamReader
18.6 객체 직렬화하기
[Vitamin Quiz 18-3]
Chapter 19 | 스레드와 태스크
19.1 프로세스와 스레드
__스레드 시작하기
__스레드 임의로 종료하기
__스레드의 일생과 상태 변화
__인터럽트: 스레드를 임의로 종료하는 다른 방법
__스레드 간 동기화
[Vitamin Quiz 19-1]
[Vitamin Quiz 19-2]
19.2 Task와 Task〈TResult〉 그리고 Parallel
__System.Threading.Tasks.Task 클래스
__코드의 비동기 실행 결과를 주는 Task〈TResult〉 클래스
__손쉬운 병렬 처리를 가능케 하는 Parallel 클래스
19.3 async 한정자와 await 연산자로 만드는 비동기 코드
__.NET이 제공하는 비동기 API 맛보기
Chapter 20 | WinForm으로 만드는 사용자 인터페이스
20.1 도대체 무슨 일이 일어나고 있는 것일까?
20.2 C# 코드로 WinForm 윈도우 만들기
20.3 Application 클래스
__메시지 필터링
20.4 윈도우를 표현하는 Form 클래스
__Form에 정의된 이벤트와 이벤트 처리기 연결하기
__Form의 프로퍼티를 조절하여 윈도우 모양 바꾸기
__Form 위에 컨트롤 올리기
20.5 폼 디자이너를 이용한 WinForm UI 구성
__새 프로젝트 만들기
__Form
__GroupBox, Label, ComboBox, CheckBox, TextBox
__TrackBar, ProgressBar
__Button, Form, Dialog
__TreeView, ListView
20.6 사용자 인터페이스와 비동기 작업
__새 프로젝트 만들기
__CopySync( )/CopyAsync( ) 메소드 구현하기
__UI 구성하기
Chapter 21 | 네트워크 프로그래밍
21.1 네트워크 프로그래밍에 앞서 알아둬야 할 기초
__인터넷의 유래
__TCP/IP 스택
__TCP/IP의 주소 체계: IP 주소
__포트
__TCP/IP의 동작 과정
21.2 TcpListener와 TcpClient
21.3 흐르는 패킷
21.4 프로토콜 설계와 네트워크 애플리케이션 프로그래밍 예제
__파일 업로드 프로토콜
__파일 업로드 서버와 클라이언트 구현하기
__서버/클라이언트가 같이 사용할 클래스 라이브러리 만들기
__파일 업로드 서버 구현하기
__클라이언트 구현하기
__파일 업로드 시험하기
Chapter 22 | 가비지 컬렉션
22.1 가비지 컬렉터를 아시나요?
22.2 개처럼 할당하고 정승처럼 수거하라
22.3 세대별 가비지 컬렉션
22.4 가비지 컬렉션을 이해했습니다. 우리는 뭘 해야 하죠?
__객체를 너무 많이 할당하지 마세요
__너무 큰 객체 할당을 피하세요
__너무 복잡한 참조 관계는 만들지 마세요
__루트를 너무 많이 만들지 마세요
__작은 구멍이 댐을 무너뜨립니다
[찾아보기]
Author
박상현
반도체 공정 자동화, 통신 장비, 무기 체계, 사이버 시큐리티 분야에서 SW를 개발해 왔으며 현재는 캘리포니아 소재 스타트업에서 소프트웨어 엔지니어로 근무 중이다. 최근까지는 방공 무기체계에 탑재되는 소프트웨어를 개발해 왔다. 컴퓨터 하드웨어와 소프트웨어 모두를 사랑하는 경력 17년차 엔지니어이다. 대학원에서 우연히 만난 인공지능 지식을 살려 『그로킹 딥러닝』(2020 세종 학술부문 우수 도서)을 번역했으며, 집필서로는 『뇌를 자극하는 알고리즘』(2010 대한민국 학술원 우수학술 도서), 『뇌를 자극하는 파이썬 3』 등이 있다.
대표 저서로는 『뇌를 자극하는 파이썬 3』(2016) 『뇌를 자극하는 C# 5.0 프로그래밍』(2014) 『뇌를 자극하는 알고리즘』(2009) 등이 있다.
반도체 공정 자동화, 통신 장비, 무기 체계, 사이버 시큐리티 분야에서 SW를 개발해 왔으며 현재는 캘리포니아 소재 스타트업에서 소프트웨어 엔지니어로 근무 중이다. 최근까지는 방공 무기체계에 탑재되는 소프트웨어를 개발해 왔다. 컴퓨터 하드웨어와 소프트웨어 모두를 사랑하는 경력 17년차 엔지니어이다. 대학원에서 우연히 만난 인공지능 지식을 살려 『그로킹 딥러닝』(2020 세종 학술부문 우수 도서)을 번역했으며, 집필서로는 『뇌를 자극하는 알고리즘』(2010 대한민국 학술원 우수학술 도서), 『뇌를 자극하는 파이썬 3』 등이 있다.
대표 저서로는 『뇌를 자극하는 파이썬 3』(2016) 『뇌를 자극하는 C# 5.0 프로그래밍』(2014) 『뇌를 자극하는 알고리즘』(2009) 등이 있다.