1부: C#

    1장: 들어가면서

        1.1 이 책의 구성

        1.2 닷넷 프레임워크

            1.2.1 닷넷 호환 언어

            공통 중간 언어(CIL: Common Intermediate Language)

[예제 1-1 : CIL 확인용 예제]

            공용 타입 시스템

            공용 언어 사양

            메타데이터

            어셈블리, 모듈, 매니페스트

            공용 언어 기반구조

            공용 언어 런타임

            닷넷 프레임워크

            C#과 닷넷 프레임워크의 관계

        정리

    2장: 개발환경 준비

        2.1 기본 예제

[예제 2-1 : 기본 예제 파일 – Program.cs]

        2.2 편집기 + 명령 행 컴파일러 사용

        2.3 모노 개발 환경

        2.4 비주얼 스튜디오 개발 환경

        2.5 닷넷 역 컴파일러

        정리

    3장: C# 기초

        3.1 기본 자료형

            정수형 기본 타입

[예제 3-2 : 정수형 변수를 더하는 코드]

            실수형 기본 타입

            문자형 기본 타입

            불린(boolean)형 기본 타입

            마치며

        3.2 형변환

            암시적 변환

            명시적 변환

        3.3 기본 문법 요소

            3.3.1 예약어, 키워드

            3.3.2 식별자

            3.3.3 리터럴

            3.3.4 변수

                2가지 저장소: 스택과 힙

                값 형식을 가리키는 변수

                참조 형식을 가리키는 변수

                기본값

            3.3.5 상수

            3.3.6 연산자, 문장 부호

        3.4 배열

            다차원 배열

            가변 배열

        3.5 제어문

            3.5.1 선택문

                관계 연산자, 논리 연산자

                if 문

                switch 문

            3.5.2 반복문

                증감 연산자, 복합 대입 연산자

                for 문

                중첩 루프

                foreach 문

                while 문

[예제 3-3 : 1 ~ 1,000까지 짝수를 더하는 while 반복문]

            3.5.3 점프문

                break 문

                continue 문

                goto 문

        정리

    4장: C# 객체 지향 문법

        4.1 클래스

[예제 4-2 : Book 타입 정의 및 사용]

            4.1.1 필드

            4.1.2 메서드

[예제 4-3 : 제곱 메서드 정의]

                중복 코드 제거

                코드 추상화

            4.1.3 생성자

[예제 4-4 : 매개변수를 갖는 생성자]

[예제 4-5 : 다중 생성자를 사용]

            4.1.4 소멸자

            4.1.5 정적 멤버, 인스턴스 멤버

                4.1.5.1 정적 필드

[예제 4-6 : 인스턴스 필드의 한계]

[예제 4-7 : 클래스의 인스턴스를 단 하나만 만드는 예제]

                4.1.5.2 정적 메서드

                    Main 메서드

                4.1.5.3 정적 생성자

            4.1.6 네임스페이스

        4.2 캡슐화

            접근 제한자

            정보 은닉

            프로퍼티

[예제 4-8 : 프로퍼티 사용 예제]

        4.3 상속

[예제 4-9 : 상속을 이용한 클래스 정의]

            4.3.1 형변환

[예제 4-10 : 부모 인스턴스를 자식으로 형변환 하는 경우]

[예제 4-11 : 배열 요소에서의 암시적 형변환]

                as, is 연산자

[예제 4-12 : as의 잘못된 사용예]

            4.3.2 모든 타입의 조상: System.Object

                ToString

                GetType

                Equals

[예제 4-13 : 참조 형식의 Equals 메서드의 동작 방식]

                GetHashCode

            4.3.3 모든 배열의 조상: System.Array

[예제 4-14 : Array 멤버 사용]

            4.3.4 this

[예제 4-15 : this를 이용한 생성자 코드 재사용]

                this와 인스턴스/정적 멤버의 관계

            4.3.5 base

        4.4 다형성

            4.4.1 메서드 오버라이드

[예제 4-17 : 부모 클래스에서 정의한 메서드와 동일한 이름의 메서드를 자식 클래스에서 정의]

                base를 이용한 메서드 재사용

                object 기본 메서드 확장

[예제 4-18 : ToString을 재정의한 Point]

[예제 4-19 : Book 타입의 Equals 개선]

            4.4.2 오버로드

                메서드 오버로드

                연산자 오버로드

                클래스 간의 형변환

        4.5 C#의 클래스 확장

            4.5.1 타입 유형 확장

                4.5.1.1 중첩 클래스

                4.5.1.2 추상 클래스

                4.5.1.3 델리게이트

[예제 4-20 : 델리게이트 사용]

                    델리게이트의 실체: 타입

                    콜백 메서드

[예제 4-21 : 델리게이트를 사용한 콜백]

[예제 4-22 : 선택 정렬]

[예제 4-23 : 델리게이트와 object를 이용한 범용 정렬 코드]

                4.5.1.4 인터페이스

                    인터페이스와 다형성

                    인터페이스 자체로 의미 부여

                    인터페이스를 이용한 콜백 구현

[예제 4-24 : IComparer 인터페이스를 이용한 Array.Sort 사용]

                    IEnumerable 인터페이스

[예제 4-25 : IEnumerable 인터페이스를 구현한 객체의 요소를 열거하는 방법]

                    느슨한 결합

                4.5.1.5 구조체

                    깊은 복사와 얕은 복사

                    ref 예약어

                    out 예약어

                4.5.1.6 열거형

[예제 4-26 : enum 타입의 사용]

[예제 4-27 : 다중 값을 포함하는 enum 인스턴스]

            4.5.2 멤버 유형 확장

                읽기 전용 필드

                상수

                이벤트

[예제 4-28 : delegate 대신 event 예약어를 사용한 예제]

                인덱서

        정리

    5장: 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 : Author 특성]

                    특성이 적용될 대상을 제한

                    다중 적용과 상속

                    AssemblyInfo.cs

            5.1.2 연산자

                시프트 연산자

                비트 논리 연산자

                연산자 우선순위

            5.1.3 예약어

                연산 범위 확인: checked, unchecked

[예제 5-2 : 타입의 범위를 넘어서는 연산]

                가변 매개변수: params

                Win32 API 호출: extern

                안전하지 않은 컨텍스트: unsafe

                참조 형식의 멤버에 대한 포인터: fixed

                스택을 이용한 값 형식 배열: stackalloc

                정리

        5.2 프로젝트 구성

            5.2.1 다중 소스코드 파일

[예제 5-3 : Program.cs 파일 내용]

[예제 5-4 : LogWriter.cs 파일 내용]

            5.2.2 라이브러리

                csc.exe로 라이브러리 생성 및 사용하기

[예제 5-5 : public 접근 제한자의 LogWriter 타입 정의]

                비주얼 스튜디오에서 라이브러리 생성 및 사용하기

            5.2.3 응용 프로그램 구성 파일: app.config

                supportedRuntime

                appSettings

[예제 5-6 : appSettings의 값을 읽는 코드]

            5.2.4 디버그빌드와 릴리즈빌드

[예제 5-7 : 실행 시 오류가 발생하는 유형]

[예제 5-8 : 최적화 예제]

                DEBUG, TRACE 전처리 상수

[예제 5-9 : DEBUG 전처리 상수 활용]

[예제 5-10 : #if/#endif 전처리기 대신 Conditional 특성 사용]

                Debug 타입과 Trace 타입

[예제 5-11 : Console, Debug, Trace 타입을 사용한 출력 예제]

            5.2.5 플랫폼(x86, x64, AnyCPU) 선택

            5.2.6 버전 관리

                어셈블리의 버전과 이름

                공개키 토큰과 어셈블리 서명

                전용 어셈블리, 전역 어셈블리

        5.3 예외

[예제 5-12 : IndexOutOfRangeException 예외가 발생하는 코드]

            예외 타입

            예외 처리기

[예제 5-13 : try/catch 예약어 사용]

[예제 5-14 : catch 순서가 잘못된 예]

            호출 스택

            예외 발생

[예제 5-15 : throw를 이용한 예외 발생]

[예제 5-16 : throw와 throw ex의 차이]

            사용자 정의 예외 타입

[예제 5-17 : 사용자 정의 예외를 사용]

            올바른 예외 처리

        5.4 힙과 스택

            5.4.1 스택

[예제 5-18 : 스택 사용]

                스택 오버플로

[예제 5-19 : Sum과 InnerSum의 스택 사용]

                재귀 호출

            5.4.2 힙

                박싱 / 언박싱

                가비지 수집기

                전체 가비지 수집

                대용량 객체 힙

                자원 해제

[예제 5-20 : 열려 있는 파일 자원]

[예제 5-21 : IDisposable을 상속받는 FileLogger 타입]

[예제 5-22 : try/finally를 이용한 Dispose 메서드 호출]

                소멸자

[예제 5-23 : 잘못된 비관리 메모리 사용 예]

[예제 5-25 : 소멸자에서 자원 해제를 추가로 담당]

[예제 5-26 : Dispose를 호출한 경우 소멸자가 불리지 않도록 변경한 객체]

        정리

    6장: BCL (Base Class Library)

        6.1 시간

            System.DateTime

[예제 6-1 : DateTime을 이용한 시간차 계산]

            System.TimeSpan

            System.Diagnostics.Stopwatch

        6.2 문자열 처리

            System.String

[예제 6-2 : string 관련 메서드의 사용 예]

[예제 6-3 : string.Format 사용 예]

            System.Text.StringBuilder

[예제 6-4 : 비효율적인 문자열 연산]

            System.Text.Encoding

            System.Text.RegularExpressions.Regex

[예제 6-5 : 주어진 문자열이 전자 메일 형식인지 확인]

        6.3 직렬화/역직렬화

            System.BitConverter

[예제 6-6 : 기본 타입의 값을 바이트 배열로 변환 및 복원]

[예제 6-7 : 바이트 배열을 16진수로 출력]

            System.IO.MemoryStream

[예제 6-8 : MemoryStream 사용 예]

            System.IO.StreamWriter / System.IO.StreamReader

[예제 6-9 : StreamWriter 사용 예]

            System.IO.BinaryWriter / System.IO.BinaryReader

[예제 6-10 : BinaryWriter / BinaryReader 사용 예]

            System.Runtime.Serialization.Formatters.Binary.BinaryFormatter

[예제 6-11 : 직렬화 예제 클래스 – Person]

[예제 6-12 : BinaryFormatter 사용 예]

            System.Xml.Serialization.XmlSerializer

            System.Runtime.Serialization.Json.DataContractJsonSerializer

        6.4 컬렉션

            System.Collections.ArrayList

[예제 6-13 : ArrayList 사용 예]

[예제 6-14 : 사용자 정의 클래스에 정렬 기능을 추가]

            System.Collections.Hashtable

            System.Collections.SortedList

            System.Collections.Stack

[예제 6-15 : Stack 사용 예]

            System.Collections.Queue

[예제 6-16 : Queue 사용 예]

        6.5 파일

            System.IO.FileStream

[예제 6-17 : FileStream에 텍스트를 쓰는 예제]

            System.IO.File / System.IO.FileInfo

[예제 6-18 : Move의 덮어 쓰기 구현]

            System.IO.Directory / System.IO.DirectoryInfo

            System.IO.Path

        6.6 스레딩

            System.Threading.Thread

[예제 6-19 : 2개의 스레드 실행이 완료된 후 프로그램 종료]

[예제 6-20 : Join 메서드 사용 예]

[예제 6-21 : 스레드를 사용하지 않는 계산 프로그램]

[예제 6-22 : 스레드를 사용한 계산 프로그램]

            System.Threading.Monitor

[예제 6-23 : 다중 스레드에서 단일 변수 사용]

[예제 6-24 : Monitor 타입 사용 예]

[예제 6-25 : 스레드에 안전한 메서드]

[예제 6-26 : 스레드에 안전하지 않은 메서드를 외부에서 안전하게 사용하는 방법]

            System.Threading.Interlocked

            System.Threading.ThreadPool

[예제 6-27 : ThreadPool을 이용한 예]

            System.Threading.EventWaitHandle

[예제 6-28 : 개선된 ThreadPool의 사용 예]

            비동기 호출

[예제 6-29 : 동기 방식의 파일 읽기]

[예제 6-30 : 비동기 방식의 파일 읽기]

            System.Delegate의 비동기 호출

[예제 6-31 : FileStream의 비동기 호출과 유사한 Delegate의 비동기 호출]

        6.7 네트워크 통신

            6.7.1 System.Net.IPAddress

            6.7.2 포트(Port)

            6.7.3 System.Net.IPEndPoint

            6.7.4 System.Net.Dns

[예제 6-32 : 현재 컴퓨터에 할당된 IP 주소 출력]

            6.7.5 System.Net.Sockets.Socket

[예제 6-33 : 소켓 프로그램 실습을 위한 기본 코드]

                UDP 소켓

[예제 6-34 : UDP 소켓: 서버 측 바인딩]

[예제 6-35 : UDP 서버 측 소켓을 구현]

[예제 6-36 : UDP 클라이언트 소켓]

[예제 6-37 : 다중 UDP 클라이언트 실행]

                TCP 소켓

[예제 6-38 : TCP 서버 측 소켓을 구현]

[예제 6-39 : TCP 클라이언트 측 소켓을 구현]

                TCP 서버 개선 – 다중 스레드와 비동기 통신

[예제 6-40 : TCP 서버의 비동기 통신]

                HTTP 통신

[예제 6-41 : TCP 소켓을 이용한 HTTP 통신]

[예제 6-42 : TCP 소켓으로 구현한 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 쿼리

                    자료 생성: INSERT

                    자료 선택: SELECT

                    자료 갱신: UPDATE

                    자료 삭제: DELETE

            6.8.2 ADO.NET 데이터 제공자

                System.Data.SqlClient.SqlConnection

                System.Data.SqlClient.SqlCommand

[예제 6-43 : 모든 회원 정보를 반환하는 SQL 쿼리 실행]

                System.Data.SqlClient.SqlDataReader

[예제 6-44 : DataReader를 이용한 테이블 내용 조회]

                System.Data.SqlClient.SqlParameter

[예제 6-45 : 매개변수화된 쿼리 사용]

                System.Data.SqlClient.SqlDataAdapter

[예제 6-46 : SqlDataAdapter를 이용해 테이블 내용을 조회]

            6.8.3 데이터 컨테이너

                일반 닷넷 클래스

[예제 6-47 : POCO와 대응되는 MemberInfoDAC]

[예제 6-48 : MemberInfoDAC + POCO를 이용한 데이터베이스 연동]

                System.Data.DataSet

[예제 6-49 : 개별 칼럼 정보를 구성]

[예제 6-50 : 칼럼 정보를 포함하는 DataTable 정의]

[예제 6-51 : DataSet과 연동되는 DataAdapter]

[예제 6-52 : DataSet 기반의 MemberInfoDAC 정의]

[예제 6-53 : DataSet을 사용한 데이터베이스 연동]

                Typed DataSet

[예제 6-54 : Typed DataSet을 이용한 데이터베이스 연동]

            6.8.4 데이터베이스 트랜잭션

[예제 6-55 : SqlCommand에 트랜잭션 적용]

        6.9 리플렉션

[예제 6-56 : 현재 AppDomain에 로드된 어셈블리 목록]

[예제 6-57 : 어셈블리에 포함된 모든 타입을 열거]

            AppDomain과 Assembly

[예제 6-58 : 별도의 AppDomain에 로드되는 어셈블리]

            Type과 리플렉션

[예제 6-59 : 리플렉션 실습용 코드]

[예제 6-60 : private 속성 접근]

[예제 6-61 : 어셈블리를 참조하지 않고 다른 DLL의 클래스를 사용]

            리플렉션을 이용한 확장 모듈 구현

[예제 6-62 : 확장 모듈 로드]

        6.10 기타

            윈도우 레지스트리

[예제 6-64 : 레지스트리 값 읽기]

            BigInteger

            IntPtr

2부: C# 고급 문법

    7장: C# 2.0

        7.1 제네릭

[예제 7-1 : 박싱이 발생하는 Stack 구현]

[예제 7-2 : 제네릭을 이용한 Stack 자료구조]

            형식 매개변수에 대한 제약 조건

[예제 7-3 : IComparable 인터페이스를 상속받은 타입만 T에 대입]

            BCL에 적용된 제네릭

        7.2 ?? 연산자

        7.3 default 예약어

[예제 7-4 : 인덱스를 벗어나도 예외가 발생하지 않는 배열]

        7.4 yield return/break

[예제 7-5 : IEnumerable 인터페이스를 이용한 자연수 표현]

        7.5 부분(partial) 클래스

        7.6 nullable 형식

[예제 7-7 : Nullable 사용]

        7.7 익명 메서드

[예제 7-8 : 익명 메서드 사용]

        7.8 정적 클래스

[예제 7-10 : 정적 클래스 사용]

    8장: C# 3.0

        8.1 var 예약어

        8.2 자동 구현 속성

        8.3 객체 초기화

        8.4 컬렉션 초기화

        8.5 익명 타입

        8.6 부분 메서드

[예제 8-3 : 부분 메서드를 구현]

        8.7 확장 메서드

[예제 8-4 : 메서드를 이용해 string 타입에 공용 메서드를 추가]

        8.8 람다 식

            8.8.1 코드로서의 람다 식

                람다 식을 위한 전용 델리게이트

[예제 8-7 : Func, Action 델리게이트]

                컬렉션과 람다 식

            8.8.2 데이터로서의 람다 식

[예제 8-10 : Expression 타입으로 직접 구성한 식 트리]

        8.9 LINQ

[예제 8-11 : LINQ 쿼리 – 컬렉션의 모든 요소를 선택]

            where, orderby, group by, join

            표준 쿼리 연산자

[예제 8-12 : Max와 LINQ 쿼리의 조합]

            일관된 데이터 조회

[예제 8-14 : LINQ to XML]

    9장: C# 4.0

        9.1 선택적 매개변수와 명명된 인자

[예제 9-1 : 3개의 인자에 대한 메서드 오버로드 정의]

        9.2 dynamic 예약어

[예제 9-3 : dynamic 사용 예]

            리플렉션 개선

            덕 타이핑

            동적 언어와의 타입 연동

[예제 9-6 : C#에서 파이썬 코드 실행]

    10장: C# 5.0

        10.1 호출자 정보

        10.2 비동기 호출

[예제 10-2 : async/await이 적용된 비동기 호출]

            닷넷 4.5 BCL에 추가된 Async 메서드

[예제 10-3 : 동기식 코드]

            Task, Task 타입

[예제 10-4 : Task 타입]

            Async 메서드가 아닌 경우의 비동기 처리

[예제 10-5 : ReadAllText 메서드를 비동기로 처리]

            비동기 호출의 병렬 처리

[예제 10-6 : 5초 + 3초 = 8초가 걸리는 작업]

3부: 닷넷 응용 프로그램

    11장: 프로젝트 유형

        11.1 Windows Forms 응용 프로그램

            메시지와 이벤트

            컨트롤

[예제 11-3 : btnInput 버튼의 Click 이벤트 처리기]

            메뉴

[예제 11-4 : 이벤트 처리기가 연결된 메뉴]

            Graphics

[예제 11-5 : 폼에 (0,0) – (100,100) 좌표로 선을 그리는 방법]

            폼과 대화상자

[예제 11-6 : SubForm.cs의 btnOK 이벤트 처리기]

            공통 대화상자

[예제 11-7 : OpenFileDialog 사용법]

            사용자 지정 컨트롤

[예제 11-8 : 사용자 지정 컨트롤의 기본 코드]

            사용자 정의 컨트롤

[예제 11-9 : FileChooser.cs 코드 파일]

            정리

        11.2 WPF 응용 프로그램

[예제 11-10 : WPF의 버튼 이벤트 처리기]

            WPF 렌더링 방식

            데이터 바인딩

[예제 11-11 : WPF로 만드는 시계 프로그램]

            레이아웃을 위한 패널

WPF Layout 예제 - 이미지 뷰어

            Content 속성

[예제 11-15 : Content 속성 사용 예]

            Padding과 Margin

            ItemsControl 타입

[예제 11-16 : ListBox 기본 사용 예]

            정리

        11.3 서비스 응용 프로그램

[예제 11-20 : 서비스를 위한 기본 코드]

        11.4 웹 응용 프로그램

            Form을 이용한 사용자 입력 처리: GET/POST

            파일 업로드와 보안

            상태 관리

            ASP.NET 웹 폼 응용 프로그램

[예제 11-21 : Calc.aspx.cs 파일의 내용]

            배포 및 서비스

            정리

        11.5 윈도우 폰 응용 프로그램

[예제 11-23 : 윈도우 폰 앱 기본 예제 – MainPage.xaml]

[예제 11-24 : 윈도우 폰 앱 만들기 - 시계]

            페이지 단위의 응용 프로그램 구현

[예제 11-25 : 페이지 전환]

            제한적인 멀티 태스킹

            Launcher / Chooser

[예제 11-29 : 모바일 폰에서 단문 메시지를 전송하는 방법]

            정리

    12장: 실습 – 파워포인트 쇼 제어 프로그램

        12.1 앱 기획

        12.2 기술 검토

        12.3 세부 요구 사항 정의

        12.4 응용 프로그램의 구조

        12.5 응용 프로그램의 동작 시나리오 및 화면 스케치

        12.6 응용 프로그램 개발

            12.6.1 개발 환경 준비

            12.6.2 PPTShow 개발

                UI 구성

[예제 12-1 : PPTShow UI 디자인]

                HTTP 서버 구현

                파워포인트 제어 (1)

                파워포인트 제어 (2)

            12.6.3 ShowController 개발

                연결 페이지 – MainPage.xaml

                제어 페이지 – PPTController.xaml

        12.7 개선 사항

4부록

    13C# 5.0 Language Specification Version 5.0 문서

    14C# 5.0 연산자와 문장 부호

    15C# 5.0 예약어

    16ASCII 코드

    17프로그래밍 기본 지식

        하드웨어 관련 용어

            중앙 처리 장치(CPU)

            레지스터(Register)

            x86, x64

            멀티 CPU와 멀티 코어

        운영체제 관련 용어

            도스(DOS)

            윈도우 운영체제

            멀티 태스킹/ 다중 프로세스

            Win32 응용 프로그램 인터페이스(API)

            윈도우 응용 프로그램

            32비트 응용 프로그램

            64비트 응용 프로그램

            윈도우 이외의 운영체제

        프로그래밍 용어

            기계어

            어셈블리어, 소스코드, 컴파일

            컴파일러, 링커, 빌드

            인터프리터 언어

            저급/고급 프로그래밍 언어

            네이티브 언어

            프로세스 가상 머신(VM)

            가상 머신 지원 언어

    18참고 자료