1부: C#

    1장: 들어가면서

        1.1 이 책의 구성

        1.2 닷넷 프레임워크

            [그림 1-1 : IL 코드를 실행하는 CLR]
            

            1.2.1 닷넷 호환 언어

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

            공용 타입 시스템

            공용 언어 사양

                [그림 1-2 : CTS와 CLS]
                

            메타데이터

                [그림 1-3 : 파일의 메타데이터]
                

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

                [그림 1-4 : 어셈블리 = (모듈 + 매니페스트) + n 개의 모듈……]
                

            공용 언어 기반구조

                [그림 1-5 : CLI와 CLR의 관계]
                

            공용 언어 런타임

            닷넷 프레임워크

                [그림 1-6 : 윈도우와 닷넷 프레임워크]
                

                [그림 1-7 : 네임스페이스로 구분한 BCL]
                

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

        정리

    2장: 개발환경 준비

        2.1 기본 예제

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

        2.3 모노 개발 환경

            [그림 2-1 : MonoDevelop의 문법 오류에 대한 경고]
            

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

            [그림 2-2 : 비주얼 스튜디오의 Output 윈도우 출력]
            

            [그림 2-3 : 오류 원인을 보여주는 Error List 창]
            

        2.5 닷넷 역 컴파일러

            

            

            

            

        정리

    3장: C# 기초

        3.1 기본 자료형

            정수형 기본 타입

            실수형 기본 타입

            문자형 기본 타입

            불린(boolean)형 기본 타입

            마치며

        3.2 형변환

            암시적 변환

            명시적 변환

        3.3 기본 문법 요소

            3.3.1 예약어, 키워드

            3.3.2 식별자

            3.3.3 리터럴

            3.3.4 변수

                [그림 3-1 : 타입에 따른 변수의 메모리 할당]
                

                [그림 3-2 : 같은 식별자로 구분되는 변수에 값을 대입]
                

                2가지 저장소: 스택과 힙

                값 형식을 가리키는 변수

                    [그림 3-3 : 스택에 저장된 값 형식의 데이터]
                    

                참조 형식을 가리키는 변수

                    [그림 3-4 : 데이터를 가리키는 참조형 변수를 위해 할당된 메모리]
                    

                    [그림 3-5 : 아무 값도 가리키고 있지 않은 참조형 변수]
                    

                    [그림 3-6 : 값 형식과 참조 형식의 차이점]
                    

                기본값

            3.3.5 상수

            3.3.6 연산자, 문장 부호

        3.4 배열

            [그림 3-7 : 일반 변수의 메모리 구조]
            

            [그림 3-8 : 배열의 메모리 구조]
            

            다차원 배열

                [그림 3-9 : 1차원 배열]
                

                [그림 3-10 : 2차원 배열]
                

                [그림 3-11 : 3차원 배열]
                

            가변 배열

                [그림 3-12 : 가변 배열의 할당 구조]
                

        3.5 제어문

            3.5.1 선택문

                관계 연산자, 논리 연산자

                if 문

                switch 문

            3.5.2 반복문

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

                for 문

                중첩 루프

                foreach 문

                while 문

            3.5.3 점프문

                break 문

                    [그림 3-13 : break와 대응되는 반복문]
                    

                continue 문

                goto 문

        정리

            [그림 3-14 : 순서도]
            

    4장: C# 객체 지향 문법

        4.1 클래스

            [그림 4-1 : 틀과 그에 해당하는 객체의 관계]
            

            [그림 4-2 : 타입과 변수명]
            

            [그림 4-3 : 클래스 인스턴스는 모두 참조형]
            

            4.1.1 필드

            4.1.2 메서드

                [그림 4-4 : 메서드 인자, 매개변수와 반환값]
                

                중복 코드 제거

                코드 추상화

            4.1.3 생성자

            4.1.4 소멸자

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

                4.1.5.1 정적 필드

                    [그림 4-5 : 정적 필드와 인스턴스 필드의 메모리 표현]
                    

                4.1.5.2 정적 메서드

                    Main 메서드

                4.1.5.3 정적 생성자

            4.1.6 네임스페이스

        4.2 캡슐화

            접근 제한자

            정보 은닉

            프로퍼티

                [그림 4-6 : get/set과 프로퍼티를 사용하는 코드의 관계]
                

        4.3 상속

            4.3.1 형변환

                [그림 4-7 기본 자료형의 형변환과 타입의 부모/자식 형변환 비교]
                

                as, is 연산자

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

                [그림 4-8 : 최상위 부모 클래스인 System.Object]
                

                [그림 4-9 : object로부터 파생된 타입 관계]
                

                ToString

                GetType

                Equals

                    [그림 4-10 : 참조형의 Equals 비교 대상]
                    

                GetHashCode

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

            4.3.4 this

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

            4.3.5 base

        4.4 다형성

            4.4.1 메서드 오버라이드

                base를 이용한 메서드 재사용

                object 기본 메서드 확장

            4.4.2 오버로드

                메서드 오버로드

                연산자 오버로드

                클래스 간의 형변환

        4.5 C#의 클래스 확장

            4.5.1 타입 유형 확장

                4.5.1.1 중첩 클래스

                4.5.1.2 추상 클래스

                4.5.1.3 델리게이트

                    [그림 4-11 : Delegate 타입의 정의 방법]
                    

                    델리게이트의 실체: 타입

                    콜백 메서드

                        [그림 4-12 : 코드로 구현한 콜백 메서드]
                        

                4.5.1.4 인터페이스

                    인터페이스와 다형성

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

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

                    IEnumerable 인터페이스

                    느슨한 결합

                4.5.1.5 구조체

                    깊은 복사와 얕은 복사

                        [그림 4-13 : 구조체와 클래스의 차이점]
                        

                    ref 예약어

                        [그림 4-14 : 값 형식에 대해 ref 동작 방식]
                        

                        [그림 4-15 : ref 예약어로 전달된 참조 변수]
                        

                        [그림 4-16 : 얕은 복사로 전달된 참조값]
                        

                        [그림 4-17 : ref 예약어로 같은 주소를 가리키는 변수]
                        

                    out 예약어

                4.5.1.6 열거형

            4.5.2 멤버 유형 확장

                읽기 전용 필드

                상수

                이벤트

                인덱서

        정리

    5장: C# 1.0 완성하기

        5.1 문법 요소

            5.1.1 구문

                5.1.1.1 전처리기 지시문

                    [그림 5-1 : 프로젝트 속성 창을 띄우는 방법]
                    

                    [그림 5-2 : 프로젝트 속성 창의 빌드 / 조건부 컴파일 기호 설정]
                    

                5.1.1.2 지역 변수의 유효 범위

                5.1.1.3 리터럴에도 적용되는 타입

                5.1.1.4 특성

                    사용자 정의 특성

                        [그림 5-3 : 컴파일된 결과물에도 남아 있는 특성 정보]
                        

                    특성이 적용될 대상을 제한

                    다중 적용과 상속

                    AssemblyInfo.cs

                        [그림 5-4 : Assembly……특성에 지정된 효과]
                        

            5.1.2 연산자

                시프트 연산자

                비트 논리 연산자

                연산자 우선순위

            5.1.3 예약어

                연산 범위 확인: checked, unchecked

                가변 매개변수: params

                Win32 API 호출: extern

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

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

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

                정리

        5.2 프로젝트 구성

            [그림 5-5 : 솔루션 생성]
            

            [그림 5-6 : 4개의 프로젝트를 소유한 솔루션]
            

            5.2.1 다중 소스코드 파일

                [그림 5-7 : 비주얼 스튜디오에서 새로운 코드 파일 추가]
                

            5.2.2 라이브러리

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

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

                    [그림 5-8 : 같은 솔루션에 포함된 라이브러리와 콘솔 프로젝트]
                    

                    [그림 5-9 : 같은 솔루션에 있는 라이브러리 프로젝트 참조]
                    

                    [그림 5-10 : 참조된 라이브러리 목록]
                    

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

                supportedRuntime

                    [그림 5-11 : 대상 프레임워크 변경]
                    

                appSettings

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

                [그림 5-12 : 프로젝트의 Configuration 설정: Debug, Release]
                

                [그림 5-13 : 비주얼 스튜디오에서 Configuration 설정]
                

                DEBUG, TRACE 전처리 상수

                Debug 타입과 Trace 타입

                    [그림 5-14 : Debug/Trace 타입의 출력 확인]
                    

                    [그림 5-15 : DebugView로 확인한 Debug, Trace 타입의 WriteLine 출력]
                    

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

                [그림 5-16 : 프로젝트의 플랫폼 지정]
                

            5.2.6 버전 관리

                어셈블리의 버전과 이름

                    [그림 5-17 : JustDecompile로 확인한 어셈블리 버전 정보]
                    

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

                    [그림 5-18 : 프로젝트 속성 창의 서명 옵션]
                    

                    [그림 5-19 : 새로운 키 파일 지정]
                    

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

                    [그림 5-20 : 닷넷 프레임워크 2.0 ~ 3.5를 위한 GAC 저장소]
                    

                    [그림 5-21 : GAC에 등록된 1.0.0.0, 1.1.0.0 어셈블리]
                    

        5.3 예외

            예외 타입

                [그림 5-22 : 예외 타입의 상속 구조]
                

            예외 처리기

            호출 스택

            예외 발생

            사용자 정의 예외 타입

            올바른 예외 처리

        5.4 힙과 스택

            5.4.1 스택

                [그림 5-23 : Sum 메서드를 호출했을 때의 스레드 스택]
                

                [그림 5-24 : int v3 지역 변수가 스택에 확보된 상태]
                

                스택 오버플로

                재귀 호출

            5.4.2 힙

                박싱 / 언박싱

                가비지 수집기

                    

                    

                    

                    

                    

                    

                전체 가비지 수집

                대용량 객체 힙

                    

                    

                자원 해제

                소멸자

                    [그림 5-25 : 소멸자를 구현한 객체 i가 new로 할당되는 경우]
                    

                    [그림 5-26 : GC가 한번 수행된 후의 소멸자를 가진 객체 상황]
                    

                    [그림 5-27 : 소멸자가 실행된 후의 객체 i의 상황]
                    

        정리

    6장: BCL (Base Class Library)

        6.1 시간

            System.DateTime

            System.TimeSpan

            System.Diagnostics.Stopwatch

        6.2 문자열 처리

            System.String

                [그림 6-1 : 번호와 대응되는 인자]
                

                [그림 6-2 : 정렬 옵션까지 지정된 형식 문자열]
                

            System.Text.StringBuilder

                [그림 6-3 : 완전히 다른 인스턴스가 생성되는 문자열 타입 연산]
                

            System.Text.Encoding

            System.Text.RegularExpressions.Regex

        6.3 직렬화/역직렬화

            [그림 6-4 : string 데이터의 직렬화/역직렬화]
            

            System.BitConverter

            System.IO.MemoryStream

                

                

                

                

                

            System.IO.StreamWriter / System.IO.StreamReader

            System.IO.BinaryWriter / System.IO.BinaryReader

            System.Runtime.Serialization.Formatters.Binary.BinaryFormatter

            System.Xml.Serialization.XmlSerializer

            System.Runtime.Serialization.Json.DataContractJsonSerializer

        6.4 컬렉션

            System.Collections.ArrayList

            System.Collections.Hashtable

                [그림 6-5 : O(N)과 O(1)의 성능 비교]
                

            System.Collections.SortedList

            System.Collections.Stack

                [그림 6-6 : 스택의 동작 방식]
                

            System.Collections.Queue

                [그림 6-7 : 큐의 동작 방식]
                

        6.5 파일

            System.IO.FileStream

                [그림 6-8 : 메모장으로 열어본 test.log 파일]
                

                [그림 6-9 : 메모장으로 열어본 test.log 파일]
                

            System.IO.File / System.IO.FileInfo

            System.IO.Directory / System.IO.DirectoryInfo

            System.IO.Path

        6.6 스레딩

            [그림 6-10 : 작업 관리자로 살펴본 스레드 수]
            

            [그림 6-11 : 스레드의 문맥 교환(context switching)]
            

            System.Threading.Thread

                [그림 6-12 : 스레드 생성]
                

                [그림 6-13 : Thread.Join 메서드의 역할]
                

            System.Threading.Monitor

                [그림 6-14 : 쿼드코어 CPU의 스레드 실행]
                

                

            System.Threading.Interlocked

            System.Threading.ThreadPool

            System.Threading.EventWaitHandle

                [그림 6-15 : 이벤트 객체의 상태 변화]
                

            비동기 호출

                [그림 6-16 : 동기 호출 – 파일 읽기]
                

                [그림 6-17 : 비동기 호출 – 파일 읽기]
                

                [그림 6-18 : 동기 호출을 사용한 스레드 풀]
                

            System.Delegate의 비동기 호출

                [그림 6-19 : 단일 스레드에서 수행되는 메서드 호출]
                

                [그림 6-20 : ThreadPool의 스레드에서 실행되는 델리게이트]
                

                [그림 6-21 : 콜백 메서드를 지정한 Delegate의 비동기 호출]
                

        6.7 네트워크 통신

            [그림 6-22 : 전화를 이용한 사람 간의 통신]
            

            [그림 6-23 : 네트워크 어댑터를 이용한 컴퓨터 간의 통신]
            

            6.7.1 System.Net.IPAddress

                [그림 6-24 : 공용 IP와 개인 IP]
                

                [그림 6-25 : 가정의 인터넷 접속 구조]
                

            6.7.2 포트(Port)

                [그림 6-26 : IP 주소로만 통신해야 한다면]
                

                [그림 6-27 : IP와 포트가 함께 적용된 경우]
                

            6.7.3 System.Net.IPEndPoint

            6.7.4 System.Net.Dns

                [그림 6-28 : 도메인 이름의 부하 분산 역할]
                

            6.7.5 System.Net.Sockets.Socket

                [그림 6-29 : IP를 기반으로 한 TCP/UDP 구현]
                

                UDP 소켓

                    [그림 6-30 : 컴퓨터, 네트워크 어댑터, IP 주소]
                    

                    [그림 6-31 : 다중 IP에서의 소켓 바인딩]
                    

                    [그림 6-32 : 3개의 스레드에 실행되는 UDP 클라이언트]
                    

                TCP 소켓

                    [그림 6-33 : TCP 서버 소켓]
                    

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

                HTTP 통신

                    [그림 6-34 : TCP로 구현한 웹 서버를 웹 브라우저에서 확인한 모습]
                    

            6.7.6 System.Net.HttpWebRequest

            6.7.7 System.Net.WebClient

        6.8 데이터베이스

            6.8.1 마이크로소프트 SQL 서버

                6.8.1.1 실습용 데이터베이스 준비

                    [그림 6-35 : "Hello" 문자열을 char/varchar에 저장하는 경우]
                    

                    [그림 6-36 : Blog 테이블 생성]
                    

                6.8.1.2 SQL 쿼리

                    자료 생성: INSERT

                        

                        

                        

                    자료 선택: SELECT

                        [그림 6-37 : MemberInfo 테이블에 기본키(PK) 설정]
                        

                    자료 갱신: UPDATE

                    자료 삭제: DELETE

            6.8.2 ADO.NET 데이터 제공자

                System.Data.SqlClient.SqlConnection

                System.Data.SqlClient.SqlCommand

                System.Data.SqlClient.SqlDataReader

                    [그림 6-38 : Read 동작 방식]
                    

                System.Data.SqlClient.SqlParameter

                System.Data.SqlClient.SqlDataAdapter

            6.8.3 데이터 컨테이너

                일반 닷넷 클래스

                    [그림 6-39 : DAC, 데이터 컨테이너, 데이터베이스의 관계]
                    

                System.Data.DataSet

                    [그림 6-40 : DataSet으로 통합된 Data Container]
                    

                Typed DataSet

                    [그림 6-41 : "새 항목" 추가 메뉴를 이용한 Typed DataSet 추가]
                    

            6.8.4 데이터베이스 트랜잭션

        6.9 리플렉션

            [그림 6-42 : 프로세스 – AppDomain – 어셈블리의 관계]
            

            [그림 6-43 : 어셈블리 내의 계층 구조]
            

            AppDomain과 Assembly

            Type과 리플렉션

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

        6.10 기타

            윈도우 레지스트리

                [그림 6-44 : 바이오스 정보가 담긴 레지스트리 경로]
                

            BigInteger

            IntPtr

2부: C# 고급 문법

    7장: C# 2.0

        7.1 제네릭

            [그림 7-1 : ArrayList에 박싱돼 저장되는 int 데이터]
            

            [그림 7-2 : 타입에 따라 자동으로 확장되는 제네릭]
            

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

            BCL에 적용된 제네릭

        7.2 ?? 연산자

        7.3 default 예약어

        7.4 yield return/break

        7.5 부분(partial) 클래스

        7.6 nullable 형식

        7.7 익명 메서드

        7.8 정적 클래스

    8장: C# 3.0

        8.1 var 예약어

        8.2 자동 구현 속성

        8.3 객체 초기화

        8.4 컬렉션 초기화

        8.5 익명 타입

        8.6 부분 메서드

        8.7 확장 메서드

            [그림 8-1 : 인텔리센스에 통합된 확장 메서드]
            

        8.8 람다 식

            8.8.1 코드로서의 람다 식

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

                컬렉션과 람다 식

                    [그림 8-2 : ForEach의 동작 방식]
                    

            8.8.2 데이터로서의 람다 식

                [그림 8-3 : 람다 식의 트리 표현]
                

        8.9 LINQ

            [그림 8-4 : LINQ 구문의 foreach 대응]
            

            where, orderby, group by, join

                [그림 8-5 : join 문의 컬렉션 대응 관계]
                

            표준 쿼리 연산자

            일관된 데이터 조회

                [그림 8-6 : LINQ 관계도]
                

    9장: C# 4.0

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

        9.2 dynamic 예약어

            리플렉션 개선

            덕 타이핑

            동적 언어와의 타입 연동

    10장: C# 5.0

        10.1 호출자 정보

        10.2 비동기 호출

            [그림 10-1 : 동기식을 비동기로 바꾸는 요령]
            

            [그림 10-2 : await를 적용한 후의 스레드 실행 관계]
            

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

            Task, Task 타입

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

            비동기 호출의 병렬 처리

3부: 닷넷 응용 프로그램

    11장: 프로젝트 유형

        [그림 11-1 : C# 새 프로젝트]
        

        11.1 Windows Forms 응용 프로그램

            [그림 11-2 : 비주얼 스튜디오의 윈도우 폼 프로젝트]
            

            [그림 11-3 : 윈도우 폼 프로그램]
            

            [그림 11-4 : 디자인 창에서 변경한 크기가 반영됨]
            

            [그림 11-5 : Form1.Designer.cs]
            

            [그림 11-6 : 변경된 윈도우 타이틀]
            

            [그림 11-7 : 디자인 창에 선택된 객체의 속성을 보여주는 속성창]
            

            메시지와 이벤트

                [그림 11-8 : 윈도우 폼 이벤트 발생]
                

            컨트롤

                [그림 11-9 : 윈도우와 컨트롤]
                

                [그림 11-10 : 윈도우 폼에서 사용 가능한 컨트롤]
                

                [그림 11-11 : 채팅 프로그램의 디자인]
                

                [그림 11-12 : 선택된 컨트롤의 속성 창 정보]
                

                [예제 11-13 : 실행 중인 예제 프로그램]
                

            메뉴

                [그림 11-14 : 비주얼 스튜디오의 펼쳐진 파일(FILE) 메뉴]
                

                [그림 11-15 : 비주얼 스튜디오 편집 창의 컨텍스트 메뉴]
                

                [그림 11-16 : 윈폼 디자인 화면에 MenuStrip 배치]
                

                [그림 11-17 : "파일" 메뉴와 서브 메뉴 2개 구성]
                

                [그림 11-18 : "새로 고침" 메뉴의 (Name) 항목 편집]
                

                [예제 11-19 : 컨텍스트 메뉴 예제 실행]
                

            Graphics

                [그림 11-20 : 검은 색 선이 그려진 윈도우]
                

                [그림 11-21 : 굵기가 지정된 선]
                

                [그림 11-22 : 줄어든 영역의 라인이 사라지는 현상]
                

            폼과 대화상자

                [그림 11-23 : SubForm 디자인]
                

                [그림 11-24 : Form1 디자인]
                

            공통 대화상자

                [그림 11-25 : 파일 열기 대화상자]
                

                [그림 11-26 : 폴더 선택 대화상자]
                

                [그림 11-27 : 폰트 대화상자]
                

                [그림 11-28 : 색상 선택 대화상자]
                

            사용자 지정 컨트롤

                [그림 11-29 : DottedBoxLabel의 모습]
                

                [그림 11-30 : DottedBoxLabel.cs 사용자 지정 컨트롤 추가]
                

                [그림 11-31 : 도구 상자에 추가된 DottedBoxLabel 컨트롤]
                

                [그림 11-32 : 속성창을 통해 컨트롤의 Text 상태값 변경]
                

            사용자 정의 컨트롤

                [그림 11-33 : FileChooser 사용자 정의 컨트롤]
                

                [그림 11-34 : 디자인 화면이 제공되는 사용자 정의 컨트롤]
                

                [그림 11-35 : FileChooser 사용자 정의 컨트롤 디자인]
                

                [그림 11-36 : Form1 디자인 창에 FileChooser 사용자 정의 컨트롤 추가]
                

            정리

        11.2 WPF 응용 프로그램

            [그림 11-37 : WPF 프로젝트]
            

            [그림 11-38 : MainWindow.xaml.cs 파일]
            

            [그림 11-39 : Button 컨트롤을 추가]
            

            WPF 렌더링 방식

                [그림 11-40 : 윈도우 폼의 구성]
                

                [그림 11-41 : WPF의 출력 구성]
                

            데이터 바인딩

                [그림 11-42 : WPF 데이터 바인딩]
                

            레이아웃을 위한 패널

                [그림 11-43 : Image 컨트롤과 Button 컨트롤로 구성된 이미지 뷰어]
                

                [예제 11-13 : 데이터 바인딩으로 연결된 BitmapImage 속성에 그림 파일을 지정]
                [그림 11-44 : 윈도우 크기 조정에 영향을 받지 않는 내부 컨트롤]
                

            Content 속성

                [그림 11-45 : Button의 Content에 지정된 string, DateTime, UIElement 인스턴스]
                

            Padding과 Margin

                [그림 11-46 : Window, Grid, Button 컨트롤 배치]
                

                [그림 11-47 : Margin="10, 10, 0, 0"을 지정한 컨트롤 위치]
                

                [그림 11-48 : Padding="30, 50, 0, 0"을 지정한 컨트롤]
                

            ItemsControl 타입

                [그림 11-49 : 기본 ListBox를 실행한 화면]
                

                [그림 11-50 : ListBoxItem 내부에 CheckBox와 Label을 포함]
                

                [그림 11-51 : ColorData 타입으로 바꾼 후 실행한 모습]
                

                [그림 11-52 : Foreground 속성에 바인딩된 글자 색]
                

            정리

        11.3 서비스 응용 프로그램

            [그림 11-53 : 서비스 목록]
            

            [그림 11-54 : 서비스 관리자에 설정되는 변수의 값]
            

        11.4 웹 응용 프로그램

            [그림 11-55 : mywebpage.html을 웹브라우저에서 연 모습]
            

            [그림 11-56 : IIS 관리자에서 사이트 고급 설정을 통해 경로를 확인]
            

            [그림 11-57 : CGI 동작 방식]
            

            [그림 11-58 : ASP, ISAPI 확장 구성 요소 설치]
            

            [그림 11-59 : asp로 구구단 출력]
            

            [그림 11-60 :
입력 값을 asp 스크립트로 처리]
            

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

                [그림 11-61 : GET 방식을 이용한 FORM 데이터 전송]
                

                [그림 11-62 : 주소 표시줄에 보이는 FORM 전송 값]
                

            파일 업로드와 보안

                [그림 11-63 : IIS_IUSRS 계정으로 쓰기 권한 설정]
                

            상태 관리

                [그림 11-64 : 데스크톱 응용 프로그램의 실행 구조]
                

                [그림 11-65 : 웹 응용 프로그램의 실행 구조]
                

                [그림 11-66 : 폼을 submit 한 경우]
                

            ASP.NET 웹 폼 응용 프로그램

                [그림 11-67 : ASP.NET 웹 폼 프로젝트 선택]
                

                [그림 11-68 : 웹 폼 추가]
                

                [그림 11-69 : 솔루션 탐색기에도 나오는 CodeBehind 파일]
                

                [그림 11-70 : 웹 폼에 Button, TextBox를 추가]
                

            배포 및 서비스

                [그림 11-71 : IISExpress에서 IIS로 호스팅 환경을 전환]
                

                [그림 11-72 : HTTP 403.14 오류]
                

                [그림 11-73 : 공유기의 관리자 홈페이지를 이용한 공용 IP 주소 확인]
                

                [그림 11-74 : 내부 컴퓨터로 포트 포워드 설정]
                

            정리

        11.5 윈도우 폰 응용 프로그램

            [그림 11-75 : 윈도우 폰용 프로젝트 템플릿]
            

            [그림 11-76 : 솔루션 탐색기 - 윈도우 폰 프로젝트]
            

            [그림 11-77 : MainPage.xaml 편집 및 디자인 화면]
            

            [그림 11-78 : 에뮬레이터에 실행된 윈도우 폰 시계 앱]
            

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

                [그림 11-79 : 새로운 페이지 추가]
                

            제한적인 멀티 태스킹

                [그림 11-80 : tombstone 옵션]
                

            Launcher / Chooser

                [그림 11-81 : SMS 앱이 Launcher를 통해 활성화 된 모습]
                

            정리

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

        12.1 앱 기획

        12.2 기술 검토

        12.3 세부 요구 사항 정의

        12.4 응용 프로그램의 구조

            [그림 12-1 : 응용 프로그램 간 동작 구조]
            

            [그림 12-2 : 세부 동작 구조]
            

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

            [그림 12-3 : PPTShow 응용 프로그램의 외양 스케치]
            

            [그림 12-4 : PPTShow 2차 스케치]
            

            [그림 12-5 : ShowController 페이지 1 스케치]
            

            [그림 12-6 : ShowController 페이지 2 스케치]
            

            [그림 12-7 : Panorama 컨트롤]
            

            [그림 12-8 : ShowController 페이지 2 스케치의 최종 버전]
            

        12.6 응용 프로그램 개발

            12.6.1 개발 환경 준비

            12.6.2 PPTShow 개발

                UI 구성

                    [그림 12-9 : PPTShow 응용 프로그램의 XAML 디자인]
                    

                    [그림 12-10 : PPTShow 실행 화면]
                    

                    

                HTTP 서버 구현

                    [그림 12-11 : http://localhost:5022/test 요청/응답 테스트]
                    

                파워포인트 제어 (1)

                    [그림 12-12 : RCW의 구조]
                    

                    [그림 12-13 : 파워포인트 COM 개체의 RCW 생성을 위한 참조 추가]
                    

                파워포인트 제어 (2)

            12.6.3 ShowController 개발

                연결 페이지 – MainPage.xaml

                    [그림 12-14 : MainPage 연결 화면]
                    

                제어 페이지 – PPTController.xaml

                    [그림 12-15 : PPTController 페이지의 PPT 슬라이드 그림 목록]
                    

                    [그림 12-16 : 첫 번째 슬라이드에 지정된 노란색 외곽선]
                    

                    [그림 12-17 : Panorama 컨트롤의 동작 화면]
                    

        12.7 개선 사항

4부록

    13C# 5.0 Language Specification Version 5.0 문서

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

    15C# 5.0 예약어

    16ASCII 코드

    17프로그래밍 기본 지식

        하드웨어 관련 용어

            중앙 처리 장치(CPU)

            레지스터(Register)

            x86, x64

            멀티 CPU와 멀티 코어

                부록 그림 1: 멀티 CPU와 멀티 코어
                

        운영체제 관련 용어

            도스(DOS)

                부록 그림 2: 명령 프롬프트
                

            윈도우 운영체제

                부록 그림 3: 각종 장치를 추상화한 윈도우 운영체제
                

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

                부록 그림 4: 멀티 태스킹
                

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

                부록 그림 5: Win32 API 공통 인터페이스를 응용 프로그램에 제공
                

            윈도우 응용 프로그램

                부록 그림 6: DLL과 EXE의 참조 관계
                

            32비트 응용 프로그램

            64비트 응용 프로그램

            윈도우 이외의 운영체제

        프로그래밍 용어

            기계어

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

            컴파일러, 링커, 빌드

                부록 그림 7: 컴파일러와 링커의 역할
                

            인터프리터 언어

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

            네이티브 언어

            프로세스 가상 머신(VM)

                부록 그림 8: VM의 역할
                

            가상 머신 지원 언어

    18참고 자료