[01부] C# 고급 문법
* 01장: 들어가면서
1.1 닷넷 프레임워크
___1.1.1 닷넷 호환 언어
___1.1.2 공통 중간 언어
___1.1.3 공용 타입 시스템
___1.1.4 공용 언어 사양
___1.1.5 메타데이터
___1.1.6 어셈블리, 모듈, 매니페스트
___1.1.7 공용 언어 기반구조
___1.1.8 공용 언어 런타임
___1.1.9 닷넷 프레임워크
___1.1.10 C#과 닷넷 프레임워크의 관계
1.2 닷넷 코어와 닷넷 표준
정리
* 02장: 개발 환경 준비
2.1 기본 예제
2.2 편집기 + 명령행 컴파일러 사용
2.3 비주얼 스튜디오 개발 환경
2.4 윈도우 운영체제 이외의 개발 환경
2.5 닷넷 역컴파일러
정리
* 03장: C# 기초
3.1 기본 자료형
___3.1.1 정수형 기본 타입
___3.1.2 실수형 기본 타입
___3.1.3 문자형 기본 타입
___3.1.4 불린(boolean)형 기본 타입
___3.1.5 마치며
3.2 형변환
___3.2.1 암시적 변환
___3.2.2 명시적 변환
3.3 기본 문법 요소
___3.3.1 예약어, 키워드
___3.3.2 식별자
___3.3.3 리터럴
___3.3.4 변수
______3.3.4.1 두 가지 저장소: 스택과 힙
______3.3.4.2 값 형식을 가리키는 변수
______3.3.4.3 참조 형식을 가리키는 변수
______3.3.4.4 기본값
______3.3.5 상수
______3.3.6 연산자, 문장 부호
3.4 배열
___3.4.1 다차원 배열
___3.4.2 가변 배열
3.5 제어문
___3.5.1 선택문
______3.5.1.1 관계 연산자, 논리 연산자
______3.5.1.2 if 문
______3.5.1.3 switch 문
___3.5.2 반복문
______3.5.2.1 증감 연산자, 복합 대입 연산자
______3.5.2.2 for 문
______3.5.2.3 중첩 루프
______3.5.2.4 foreach 문
______3.5.2.5 while 문
___3.5.3 점프문
______3.5.3.1 break 문
______3.5.3.2 continue 문
______3.5.3.3 goto 문
정리
* 04장: C# 객체지향 문법
4.1 클래스
___4.1.1 필드
___4.1.2 메서드
______4.1.2.1 중복 코드 제거
______4.1.2.2 코드 추상화
______4.1.3 생성자
___4.1.4 소멸자
___4.1.5 정적 멤버, 인스턴스 멤버
______4.1.5.1 정적 필드
______4.1.5.2 정적 메서드
______4.1.5.3 정적 생성자
___4.1.6 네임스페이스
4.2 캡슐화
___4.2.1 접근 제한자
___4.2.2 정보 은닉
___4.2.3 프로퍼티
4.3 상속
___4.3.1 형변환
______4.3.1.1 as, is 연산자
______4.3.2 모든 타입의 조상: System.Object
______4.3.2.1 ToString
______4.3.2.2 GetType
______4.3.2.3 Equals
______4.3.2.4 GetHashCode
___4.3.3 모든 배열의 조상: System.Array
___4.3.4 this
______4.3.4.1 this와 인스턴스/정적 멤버의 관계
___4.3.5 base
4.4 다형성
___4.4.1 메서드 오버라이드
______4.4.1.1 base를 이용한 메서드 재사용
______4.4.1.2 object 기본 메서드 확장
___4.4.2 오버로드
______4.4.2.1 메서드 오버로드
______4.4.2.2 연산자 오버로드
______4.4.2.3 클래스 간의 형변환
4.5 C#의 클래스 확장
___4.5.1 타입 유형 확장
______4.5.1.1 중첩 클래스
______4.5.1.2 추상 클래스
______4.5.1.3 델리게이트
______4.5.1.4 인터페이스
______4.5.1.5 구조체
______4.5.1.6 열거형
___4.5.2 멤버 유형 확장
______4.5.2.1 읽기 전용 필드
______4.5.2.2 상수
______4.5.2.3 이벤트
______4.5.2.4 인덱서
정리
* 05장: C# 1.0 완성하기
5.1 문법 요소
___5.1.1 구문
______5.1.1.1 전처리기 지시문
______5.1.1.2 지역 변수의 유효 범위
______5.1.1.3 리터럴에도 적용되는 타입
______5.1.1.4 특성
___5.1.2 연산자
______5.1.2.1 시프트 연산자
______5.1.2.2 비트 논리 연산자
______5.1.2.3 연산자 우선순위
___5.1.3 예약어
______5.1.3.1 연산 범위 확인: checked, unchecked
______5.1.3.2 가변 매개변수: params
______5.1.3.3 Win32 API 호출: extern
______5.1.3.4 안전하지 않은 컨텍스트: unsafe
______5.1.3.5 참조 형식의 멤버에 대한 포인터: fixed
______5.1.3.6 스택을 이용한 값 형식 배열: stackalloc
정리
5.2 프로젝트 구성
___5.2.1 다중 소스코드 파일
___5.2.2 라이브러리
______5.2.2.1 csc.exe로 라이브러리 생성 및 사용
______5.2.2.2 비주얼 스튜디오에서 라이브러리 생성 및 사용
___5.2.3 응용 프로그램 구성 파일: app.config
______5.2.3.1 supportedRuntime
______5.2.3.2 appSettings
___5.2.4 디버그 빌드와 릴리스 빌드
______5.2.4.1 DEBUG, TRACE 전처리 상수
______5.2.4.2 Debug 타입과 Trace 타입
___5.2.5 플랫폼(x86, x64, AnyCPU) 선택
___5.2.6 버전 관리
______5.2.6.1 어셈블리의 버전과 이름
______5.2.6.2 공개키 토큰과 어셈블리 서명
______5.2.6.3 전용 어셈블리, 전역 어셈블리
5.3 예외
___5.3.1 예외 타입
___5.3.2 예외 처리기
___5.3.3 호출 스택
___5.3.4 예외 발생
___5.3.5 사용자 정의 예외 타입
___5.3.6 올바른 예외 처리
5.4 힙과 스택
___5.4.1 스택
______5.4.1.1 스택 오버플로
______5.4.1.2 재귀 호출
___5.4.2 힙
______5.4.2.1 박싱/언박싱
______5.4.2.2 가비지 수집기
______5.4.2.3 전체 가비지 수집
______5.4.2.4 대용량 객체 힙
______5.4.2.5 자원 해제
______5.4.2.6 소멸자
정리
* 06장: BCL(Base Class Library)
6.1 시간
___6.1.1 System.DateTime
___6.1.2 System.TimeSpan
___6.1.3 System.Diagnostics.Stopwatch
6.2 문자열 처리
___6.2.1 System.String
___6.2.2 System.Text.StringBuilder
___6.2.3 System.Text.Encoding
___6.2.4 System.Text.RegularExpressions.Regex
6.3 직렬화/역직렬화
___6.3.1 System.BitConverter
___6.3.2 System.IO.MemoryStream
___6.3.3 System.IO.StreamWriter / System.IO.StreamReader
___6.3.4 System.IO.BinaryWriter / System.IO.BinaryReader
___6.3.5 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
___6.3.6 System.Xml.Serialization.XmlSerializer
___6.3.7 System.Runtime.Serialization.Json.DataContractJsonSerializer
6.4 컬렉션
___6.4.1 System.Collections.ArrayList
___6.4.2 System.Collections.Hashtable
___6.4.3 System.Collections.SortedList
___6.4.4 System.Collections.Stack
___6.4.5 System.Collections.Queue
6.5 파일
___6.5.1 System.IO.FileStream
___6.5.2 System.IO.File / System.IO.FileInfo
___6.5.3 System.IO.Directory / System.IO.DirectoryInfo
___6.5.4 System.IO.Path
6.6 스레딩
___6.6.1 System.Threading.Thread
___6.6.2 System.Threading.Monitor
___6.6.3 System.Threading.Interlocked
___6.6.4 System.Threading.ThreadPool
___6.6.5 System.Threading.EventWaitHandle
___6.6.6 비동기 호출
___6.6.7 System.Delegate의 비동기 호출
6.7 네트워크 통신
___6.7.1 System.Net.IPAddress
___6.7.2 포트
___6.7.3 System.Net.IPEndPoint
___6.7.4 System.Net.Dns
___6.7.5 System.Net.Sockets.Socket
______6.7.5.1 UDP 소켓
______6.7.5.2 TCP 소켓
______6.7.5.3 TCP 서버 개선 - 다중 스레드와 비동기 통신
______6.7.5.4 HTTP 통신
___6.7.6 System.Net.HttpWebRequest
___6.7.7 System.Net.WebClient
6.8 데이터베이스
___6.8.1 마이크로소프트 SQL 서버
______6.8.1.1 실습용 데이터베이스 준비
______6.8.1.2 SQL 쿼리
___6.8.2 ADO.NET 데이터 제공자
______6.8.2.1 System.Data.SqlClient.SqlConnection
______6.8.2.2 System.Data.SqlClient.SqlCommand
______6.8.2.3 System.Data.SqlClient.SqlDataReader
______6.8.2.4 System.Data.SqlClient.SqlParameter
______6.8.2.5 System.Data.SqlClient.SqlDataAdapter
___6.8.3 데이터 컨테이너
______6.8.3.1 일반 닷넷 클래스
______6.8.3.2 System.Data.DataSet
______6.8.3.3 Typed DataSet
___6.8.4 데이터베이스 트랜잭션
6.9 리플렉션
___6.9.1 AppDomain과 Assembly
___6.9.2 Type과 리플렉션
___6.9.3 리플렉션을 이용한 확장 모듈 구현
6.10 기타
___6.10.1 윈도우 레지스트리
___6.10.2 BigInteger
___6.10.3 IntPtr
[02부] C# 고급 문법
* 07장: C# 2.0
7.1 제네릭
___7.1.1 형식 매개변수에 대한 제약 조건
___7.1.2 BCL에 적용된 제네릭
7.2 ?? 연산자(null 병합 연산자)
7.3 default 예약어
7.4 yield return/break
7.5 부분(partial) 클래스
7.6 nullable 형식
7.7 익명 메서드
7.8 정적 클래스
* 08장: C# 3.0
8.1 var 예약어
8.2 자동 구현 속성
8.3 객체 초기화
8.4 컬렉션 초기화
8.5 익명 타입
8.6 부분 메서드
8.7 확장 메서드
8.8 람다 식
___8.8.1 코드로서의 람다 식
______8.8.1.1 람다 식을 위한 전용 델리게이트
______8.8.1.2 컬렉션과 람다 식
______8.8.2 데이터로서의 람다 식
8.9 LINQ
___8.9.1 where, orderby, group by, join
___8.9.2 표준 쿼리 연산자
___8.9.3 일관된 데이터 조회
* 09장: C# 4.0
9.1 선택적 매개변수와 명명된 인자
9.2 dynamic 예약어
___9.2.1 리플렉션 개선
___9.2.2 덕 타이핑
___9.2.3 동적 언어와의 타입 연동
* 10장: C# 5.0
10.1 호출자 정보
10.2 비동기 호출
___10.2.1 닷넷 4.5 BCL에 추가된 Async 메서드
___10.2.2 Task, Task 타입
___10.2.3 async 예약어가 적용된 메서드의 반환 타입
___10.2.4 Async 메서드가 아닌 경우의 비동기 처리
___10.2.5 비동기 호출의 병렬 처리
* 11장: C# 6.0
11.1 C# 3.0에 소개된 자동 구현 속성의 초기화 구문 추가
11.2 람다 식을 이용한 메서드, 속성 및 인덱서 정의
11.3 using static 구문을 이용한 타입명 생략
11.4 null 조건 연산자
11.5 문자열 내에 식(expression)을 포함
11.6 nameof 연산자
11.7 Dictionary 타입의 인덱스 초기화
11.8 예외 필터
11.9 catch/finally 블록 내에서 await 사용 가능
11.10 컬렉션 초기화 구문에 확장 메서드로 정의한 Add 지원
11.11 #pragma의 “CS” 접두사 지원
11.12 재정의된 메서드의 선택 정확도를 향상
* 12장: C# 7.0
12.1 더욱 편리해진 out 매개변수 사용
12.2 반환값 및 로컬 변수에 ref 기능 추가(ref returns and locals)
12.3 튜플
12.4 Deconstruct 메서드
12.5 람다 식을 이용한 메서드 정의 확대(Expression-bodied members)
12.6 지역 함수(Local functions)
12.7 사용자 정의 Task 타입을 async 메서드의 반환 타입으로 사용 가능
12.8 자유로워진 throw 사용
12.9 리터럴에 대한 표현 방법 개선(Literal improvements)
12.10 패턴 매칭
___12.10.1 is 연산자의 패턴 매칭
___12.10.2 switch/case 문의 패턴 매칭
* 13장: C# 7.1
13.1 Main 메서드에 async 예약어 허용
13.2 default 리터럴 추가
13.3 타입 추론을 통한 튜플의 변수명 자동 지정
13.4 패턴 매칭 - 제네릭 추가
* 부록
A _ C# 7.1 언어 명세
B _ C# 7.1 연산자와 문장 부호
C _ C# 7.1 예약어
D _ ASCII 코드
E _ 프로그래밍 기본 지식
E.1 하드웨어 관련 용어
___E.1.1 중앙 처리 장치(CPU)
___E.1.2 레지스터(Register)
___E.1.3 x86, x64
___E.1.4 멀티 CPU와 멀티 코어
E.2 운영체제 관련 용어
___E.2.1 도스(DOS)
___E.2.2 윈도우 운영체제
___E.2.3 멀티 태스킹/ 다중 프로세스
___E.2.4 Win32 응용 프로그램 인터페이스(API)
___E.2.5 윈도우 응용 프로그램
___E.2.6 32비트 응용 프로그램
___E.2.7 64비트 응용 프로그램
___E.2.8 윈도우 이외의 운영체제
E.3 프로그래밍 용어
E.3.1 기계어
E.3.2 어셈블리어, 소스코드, 컴파일
E.3.3 컴파일러, 링커, 빌드
E.3.4 인터프리터 언어
E.3.5 저급/고급 프로그래밍 언어
E.3.6 네이티브 언어
E.3.7 프로세스 가상 머신(VM)
E.3.8 가상 머신 지원 언어
F _ 참고 자료