C#与.NET 3.0 高级程序设计(English版)
1부 nnn C# 및 .NET 플랫폼 소개
n1장 .NET의 철학 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
이전 상황의 이해. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
.NET 솔루션. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
.NET 플랫폼의 빌딩 블록(CLR, CTS,
그리고 CLS). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
추가 .NET 인식 프로그래밍 언어. . . . . . . . . . . . . . . . . . . . . . . . . . . 9
.NET 어셈블리 개요. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
공통 유형 시스템 이해. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
공용 언어 사양 이해 . . . . . . . . . . . . . . . . . . . . . . 20
공용 언어 런타임 이해. . . . . . . . . . . . . . . . . . . . . . . . . . 22
어셈블리/네임스페이스/유형 구별. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
ildasm.exe를 사용하여 어셈블리 탐색 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Lutz Roeder의 반사경을 사용하여 어셈블리 탐색 . . . . . . . . . . . . . . . . . . . . . 31
.NET 런타임 배포. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
.NET의 플랫폼 독립적 특성. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
요약 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
n2장 C# 애플리케이션 구축 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
.NET Framework 3.5 SDK의 역할. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
csc.exe를 사용하여 C# 애플리케이션 빌드 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
TextPad를 사용하여 .NET 애플리케이션 구축. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Notepad++를 사용하여 .NET 애플리케이션 구축. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
SharpDevelop을 사용하여 .NET 애플리케이션 구축. . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Visual C# 2008 Express를 사용하여 .NET 애플리케이션 구축. . . . . . . . . . . . . . . . . . 50
Visual Studio 2008을 사용하여 .NET 애플리케이션 구축. . . . . . . . . . . . . . . . . . . . . . 52
추가 .NET 개발 도구의 일부 카탈로그입니다. . . . . . . . . . . . . . . . . . . . 64
요약 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
iv
2부 nnn 핵심 C# 프로그래밍 구문
n3장 핵심 C# 프로그래밍 구문, 1부. . . . . . . . . . . . . . . . . . . . . . . . . 69
간단한 C# 프로그램의 분석. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
흥미로운 점: 일부 추가 회원
시스템.환경 클래스 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
System.Console 클래스. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
시스템 데이터 유형 및 C# 약식 표기법. . . . . . . . . . . . . . . . . . . . . . . . . . . 80
System.String 유형 이해. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
데이터 유형 변환 축소 및 확대. . . . . . . . . . . . . . . . . . . . . . . . . . 95
C# 반복 구문 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
의사결정 구조와 관계/동등 연산자. . . . . . . . . . . . . . . . . 102
요약 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
n4장 핵심 C# 프로그래밍 구문, 2부. . . . . . . . . . . . . . . . . . . . . . . . 107
메소드 및 매개변수 수정자. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
멤버 오버로딩 이해. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
C#의 배열 조작. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
열거형 유형 이해 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
구조 유형 이해. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
값 유형 및 참조 유형 이해. . . . . . . . . . . . . . . . . . . . . . . . 129
값 및 참조 유형: 최종 세부 정보 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
C# Null 허용 유형 이해. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
요약 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
nCHAPTER 5 캡슐화된 클래스 유형 정의. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
C# 클래스 유형을 소개합니다. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
클래스 생성자 이해 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
this 키워드의 역할. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
정적 키워드 이해. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
OOP의 핵심을 정의합니다. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
C# 액세스 수정자 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
첫 번째 기둥: C#의 캡슐화 서비스. . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
상수 데이터 이해. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
읽기 전용 필드 이해. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
부분 유형 이해. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
XML을 통해 C# 소스 코드 문서화 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
우리 노동의 성과를 시각화합니다. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
요약 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
nCHAPTER 6 상속 및 다형성 이해 . . . . . . . . . . . . . . . . . . 185
상속의 기본 메커니즘. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
Visual Studio 클래스 다이어그램 수정. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
두 번째 기둥: 상속의 세부 사항 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
봉쇄/위임을 위한 프로그래밍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
n컨텐츠 v
vi 목차
세 번째 기둥: C#의 다형성 지원. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
기본 클래스/파생 클래스 캐스팅 규칙 이해 . . . . . . . . . . . . . . . . . . . 210
마스터 상위 클래스: System.Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
요약 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
n장 7 구조적 예외 처리 이해. . . . . . . . . . . . . . . . . . . 219
오류, 버그 및 예외에 대한 찬사. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
.NET 예외 처리의 역할. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
가능한 가장 간단한 예. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
예외 상태 구성 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
시스템 수준 예외(System.SystemException) . . . . . . . . . . . . . . . . . . . . . 230
애플리케이션 수준 예외(System.ApplicationException) . . . . . . . . . . . . . . . 231
여러 예외 처리 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
마지막 블록. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
누가 무엇을 던지고 있나요? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
처리되지 않은 예외의 결과. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
Visual Studio를 사용하여 처리되지 않은 예외 디버깅 . . . . . . . . . . . . . . . . . . . 242
요약 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
nCHAPTER 8 객체 수명 이해 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
클래스, 개체 및 참조. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
객체 수명의 기본. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
애플리케이션 루트의 역할. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
객체 생성 이해. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
System.GC 유형. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
마무리 가능한 개체 만들기 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
일회용 개체 만들기 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
종료 가능 및 일회용 유형 빌드. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
요약 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
3부 nnn 고급 C# 프로그래밍 구문
n9장 인터페이스 작업 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
인터페이스 유형 이해. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
사용자 정의 인터페이스 정의. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
인터페이스 구현 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
개체 수준에서 인터페이스 멤버 호출. . . . . . . . . . . . . . . . . . . . . . . . . 276
매개변수로서의 인터페이스. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
반환 값으로서의 인터페이스. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
인터페이스 유형의 배열. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
Visual Studio 2008을 사용하여 인터페이스 구현. . . . . . . . . . . . . . . . . . . . . . . 282
명시적 인터페이스 구현을 통해 이름 충돌 해결 . . . . . . . . . . . . . 283
인터페이스 계층 설계 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
열거 가능 유형 구축(IEnumerable 및 IEnumerator) . . . . . . . . . . . . . . . 289
복제 가능한 객체 빌드(ICloneable) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
비교 가능한 개체 만들기(IComparable). . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
콜백 인터페이스 이해. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304
요약 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308
n10장 컬렉션 및 제네릭 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309
System.Collections 네임스페이스의 인터페이스. . . . . . . . . . . . . . . . . . . . . 309
System.Collections의 클래스 유형. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
System.Collections.Specialized 네임스페이스. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316
Boxing, Unboxing 및 System.Object 관계. . . . . . . . . . . . . . . . . . . 316
유형 안전성 문제 및 강력한 유형의 컬렉션 . . . . . . . . . . . . . . . . . . 319
System.Collections.Generic 네임스페이스. . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
사용자 정의 일반 메소드 생성. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327
일반 구조 및 클래스 생성. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330
사용자 정의 일반 컬렉션 만들기 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332
일반 기본 클래스 만들기. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337
일반 인터페이스 생성. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338
요약 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339
n11장 대리자, 이벤트 및 람다. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341
.NET 대리인 유형 이해. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341
C#에서 대리자 정의. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342
System.MulticastDelegate 및 System.Delegate 기본 클래스. . . . . . . . . 344
가장 간단한 대리인 예 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
대리인을 사용하여 자동차 유형을 개조합니다. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
보다 정교한 위임 예 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353
대리자 공분산 이해. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358
일반 대리자 만들기 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360
C# 이벤트 이해. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362
일반 EventHandler 대리자입니다. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369
C# 익명 메서드 이해. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370
메소드 그룹 변환 이해. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372
C# 2008 람다 연산자. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374
요약 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381
n12장 인덱서, 연산자 및 포인터 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383
인덱서 방법 이해. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383
연산자 오버로딩 이해 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388
사용자 정의 유형 변환 이해. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397
포인터 유형 작업. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404
C# 전처리기 지시문. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411
요약 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414
n13장 C# 2008 언어 기능 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415
암시적으로 유형이 지정된 지역 변수 이해 . . . . . . . . . . . . . . . . . . . . . . . . . . 415
자동 속성 이해 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420
확장 방법 이해. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424
n목차 vii
부분 메서드 이해 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433
개체 초기화 구문 이해. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436
익명 유형 이해. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440
요약 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445
n14장 LINQ 소개. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447
LINQ의 역할 이해. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447
LINQ 쿼리 표현식에 대한 첫 번째 살펴보기. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450
LINQ 및 일반 컬렉션. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456
LINQ 및 제네릭이 아닌 컬렉션. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457
LINQ 쿼리 연산자의 내부 표현. . . . . . . . . . . . . . . . . . . . . 459
C# LINQ 쿼리 연산자를 조사합니다. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463
LINQ 쿼리: 그들 자신만의 섬?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469
요약 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 472
PART 4 .NET 어셈블리를 사용한 nnn 프로그래밍
n15장 .NET 어셈블리 소개 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475
사용자 정의 네임스페이스 정의. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475
.NET 어셈블리의 역할. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480
.NET 어셈블리 형식 이해. . . . . . . . . . . . . . . . . . . . . . . . . . 482
단일 파일 어셈블리 빌드 및 사용 . . . . . . . . . . . . . . . . . . . . . . . . . 486
다중 파일 어셈블리 빌드 및 사용 . . . . . . . . . . . . . . . . . . . . . . . . . . . 496
프라이빗 어셈블리 이해. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499
공유 어셈블리 이해. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504
공유 어셈블리 사용 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 510
공유 어셈블리 구성 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 512
GAC 내부 구성 조사. . . . . . . . . . . . . . . . . . . . . . . . 516
게시자 정책 어셈블리 이해. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518
요소 이해하기 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 519
System.Configuration 네임스페이스. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521
기계 구성 파일. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 522
요약 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 522
nCHAPTER 16 유형 리플렉션, 후기 바인딩 및 속성 기반
프로그램 작성. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523
유형 메타데이터의 필요성. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523
반사 이해 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 527
사용자 정의 메타데이터 뷰어 구축. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 530
동적으로 어셈블리 로드 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 536
공유 어셈블리에 대한 반성. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 538
후기 바인딩 이해. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 539
viii n목차
속성 프로그래밍 이해 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 542
사용자 정의 속성 구축. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 546
어셈블리 수준(및 모듈 수준) 속성. . . . . . . . . . . . . . . . . . . . . . . . . . 549
초기 바인딩을 사용한 속성 반영. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 550
후기 바인딩을 사용한 속성 반영. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 551
리플렉션, 후기 바인딩 및 사용자 정의 속성을 관점에서 살펴보기. . . . . . 553
확장 가능한 애플리케이션 구축. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 553
요약 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 559
n17장 프로세스, AppDomain 및 개체 컨텍스트. . . . . . . . . . . . . . . . . . . 561
기존 Win32 프로세스 검토. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 561
.NET 플랫폼에서 프로세스와 상호 작용. . . . . . . . . . . . . . . . . . . . . . 563
.NET 애플리케이션 도메인 이해. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 571
개체 컨텍스트 경계 이해. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 577
프로세스, AppDomain 및 컨텍스트 요약. . . . . . . . . . . . . . . . . . . . . . 581
요약 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 582
n18장 멀티스레드 애플리케이션 구축. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583
프로세스/AppDomain/컨텍스트/스레드 관계. . . . . . . . . . . . . . . . . . . . 583
.NET Delegate에 대한 간략한 검토. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 585
대리인의 비동기적 특성. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 587
비동기적으로 메소드 호출. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 588
System.Threading 네임스페이스. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593
System.Threading.Thread 클래스. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594
프로그래밍 방식으로 보조 스레드 생성. . . . . . . . . . . . . . . . . . . . . . . . . . 597
동시성의 문제. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 602
타이머 콜백을 사용한 프로그래밍. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 609
CLR ThreadPool 이해. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 610
BackgroundWorker 구성 요소의 역할. . . . . . . . . . . . . . . . . . . . . . . . . . 612
요약 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 616
n19장 CIL 및 동적 어셈블리의 역할 이해 . . . . . . . . 617
CIL 프로그래밍의 본질에 대한 고찰 . . . . . . . . . . . . . . . . . . . . . . . . . . . 617
CIL 지시문, 속성 및 Opcode 검사 . . . . . . . . . . . . . . . . . . . . . . . 618
푸시 및 팝핑: CIL의 스택 기반 특성 . . . . . . . . . . . . . . . . . . . 620
왕복 엔지니어링 이해. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 621
CIL 지시문 및 속성 이해. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 629
.NET 기본 클래스 라이브러리, C# 및 CIL 데이터 유형 매핑. . . . . . . . . . . . . . . . 635
CIL에서 유형 멤버 정의. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 636
CIL Opcode를 검사합니다. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 638
CIL을 사용하여 .NET 어셈블리 빌드하기 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 643
동적 어셈블리 이해. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 648
요약 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 657
n 목차 ix
5부 nnn .NET 기본 클래스 라이브러리 소개
n20장 파일 I/O 및 격리된 저장소 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 661
System.IO 네임스페이스 탐색. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 661
디렉터리(정보) 및 파일(정보) 유형. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 662
DirectoryInfo 유형 작업. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 663
디렉토리 유형 작업. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 667
DriveInfo 클래스 유형 작업. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 668
FileInfo 클래스 작업. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 669
파일 유형 작업 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 673
추상 스트림 클래스. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 675
StreamWriters 및 StreamReaders 작업. . . . . . . . . . . . . . . . . . . . . . . . 677
StringWriters 및 StringReaders 작업. . . . . . . . . . . . . . . . . . . . . . . . . . 680
BinaryWriters 및 BinaryReaders 작업. . . . . . . . . . . . . . . . . . . . . . . . . . 682
프로그래밍 방식으로 파일을 "감시"합니다. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 683
비동기 파일 I/O 수행. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 685
격리된 저장소의 역할 이해. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 687
코드 액세스 보안에 대한 입문서. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 688
격리된 스토리지 개요. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 698
IsolatedStorageFile을 사용하여 저장소 얻기. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 702
격리된 스토리지 실행: ClickOnce 배포. . . . . . . . . . . . . . . . . . . . . . . . 707
요약 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 710
nCHAPTER 21 객체 직렬화 소개. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 711
객체 직렬화 이해 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 711
직렬화를 위한 객체 구성 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 713
직렬화 포맷터 선택. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 715
BinaryFormatter를 사용하여 개체를 직렬화합니다. . . . . . . . . . . . . . . . . . . . . . . . . . . 717
SoapFormatter를 사용하여 객체 직렬화 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 719
XmlSerializer를 사용하여 개체를 직렬화합니다. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 720
객체 컬렉션 직렬화 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 723
직렬화 프로세스 사용자 정의. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 724
요약 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 729
n22장 ADO.NET 1부: 연결된 계층. . . . . . . . . . . . . . . . . . . . . . . . . . . . 731
ADO.NET의 고급 정의. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 731
ADO.NET 데이터 공급자 이해. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 733
추가 ADO.NET 네임스페이스. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 736
System.Data 네임스페이스의 유형. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 737
인터페이스를 사용하여 데이터 공급자 추상화. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 741
AutoLot 데이터베이스를 생성합니다. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 744
ADO.NET 데이터 공급자 팩터리 모델. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 749
ADO.NET의 연결 계층 이해. . . . . . . . . . . . . . . . . . . . . . . . . 755
데이터 리더 작업 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 760
재사용 가능한 데이터 액세스 라이브러리 구축. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 763
x n컨텐츠
콘솔 UI 기반 프런트 엔드 만들기. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 770
SqlCommand를 사용한 비동기 데이터 액세스. . . . . . . . . . . . . . . . . . . . . . . . . 775
데이터베이스 트랜잭션 이해. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 777
요약 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 781
n23장 ADO.NET 파트 II: 연결이 끊긴 계층 . . . . . . . . . . . . . . . . . . . . . . . . 783
ADO.NET의 연결이 끊긴 계층 이해. . . . . . . . . . . . . . . . . . . . . . 783
DataSet의 역할 이해 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 784
DataColumns 작업. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 787
DataRows 작업. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 789
DataTable 작업 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 793
DataTable 개체를 사용자 인터페이스에 바인딩합니다. . . . . . . . . . . . . . . . . . . . . . . . . . . . 798
데이터 어댑터를 사용하여 DataSet/DataTable 개체 채우기. . . . . . . . . . . . . . . . . . . 808
AutoLotDAL.dll을 다시 방문합니다. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 811
다중 테이블 DataSet 개체 탐색. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 814
Visual Studio 2008의 데이터 액세스 도구. . . . . . . . . . . . . . . . . . . . . . . . . . . . 820
UI 레이어에서 자동 생성된 코드 분리. . . . . . . . . . . . . . . . . . . . . . . 831
요약 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 835
nCHAPTER 24 LINQ API를 사용한 프로그래밍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 837
ADO.NET에 대한 LINQ의 역할. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 837
LINQ to DataSet을 사용한 프로그래밍. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 838
LINQ to SQL을 사용한 프로그래밍. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 843
SqlMetal.exe를 사용하여 엔터티 클래스 생성. . . . . . . . . . . . . . . . . . . . . . . . . . . 848
Visual Studio 2008을 사용하여 엔터티 클래스 구축. . . . . . . . . . . . . . . . . . . . . . . . 854
LINQ to XML을 사용하여 XML 문서 조작. . . . . . . . . . . . . . . . . . . . . . . . 857
메모리 내 문서 탐색 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 862
요약 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 865
n25장 Windows Communication Foundation 소개. . . . . . . . . . . . . . . 867
분산 컴퓨팅 API의 포푸리. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 867
WCF의 역할. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 873
핵심 WCF 어셈블리 조사 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 876
Visual Studio WCF 프로젝트 템플릿. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 877
WCF 애플리케이션의 기본 구성. . . . . . . . . . . . . . . . . . . . . . . . . . . . 879
WCF의 ABC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 880
WCF 서비스 구축. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 885
WCF 서비스를 호스팅합니다. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 888
WCF 클라이언트 애플리케이션 구축. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 896
WCF 서비스 라이브러리 프로젝트 템플릿 사용. . . . . . . . . . . . . . . . . . . . . . . . . 900
WCF 서비스를 Windows 서비스로 호스팅합니다. . . . . . . . . . . . . . . . . . . . . . . . . 903
비동기적으로 서비스 호출. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 908
WCF 데이터 계약 설계. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 910
요약 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 915
n목차 xi
n26장 Windows Workflow Foundation 소개. . . . . . . . . . . . . . . . . . . . . 917
비즈니스 프로세스 정의. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 917
WF의 구성 요소. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 918
WF 어셈블리, 네임스페이스 및 프로젝트. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 924
간단한 워크플로 지원 애플리케이션 구축. . . . . . . . . . . . . . . . . . . . . . . . . 926
WF 엔진 호스팅 코드 검사. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 930
워크플로 내에서 웹 서비스 호출. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 934
재사용 가능한 WF 코드 라이브러리 구축. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 945
맞춤 활동에 관한 간략한 설명 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 951
요약 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 952
6부 nnn 데스크탑 사용자 인터페이스
n27장 Windows Forms를 사용한 프로그래밍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 955
Windows Forms 네임스페이스. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 955
간단한 Windows Forms 애플리케이션 구축(IDE 프리) . . . . . . . . . . . . . . . . . 956
Visual Studio Windows Forms 프로젝트 템플릿. . . . . . . . . . . . . . . . . . . . . . 961
형태의 해부학. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 968
마우스 활동에 응답합니다. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 975
키보드 활동에 응답합니다. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 977
대화 상자 디자인. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 978
GDI+를 사용하여 그래픽 데이터 렌더링. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 985
완전한 Windows Forms 애플리케이션 구축. . . . . . . . . . . . . . . . . . . . . . . . 990
요약 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 997
n28장 Windows Presentation Foundation 및 XAML 소개. . . . . . . 999
WPF의 동기. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 999
WPF 애플리케이션의 다양한 특징. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1002
WPF 어셈블리 조사 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1004
(XAML 프리) WPF 애플리케이션 구축. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1011
애플리케이션 유형에 대한 추가 세부정보입니다. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1015
창 유형에 대한 추가 세부정보입니다. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1017
(XAML 중심) WPF 애플리케이션 구축. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1021
마크업을 .NET 어셈블리로 변환. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1025
코드 숨김 파일을 사용하여 문제 분리 . . . . . . . . . . . . . . . . . . . . . . . 1029
XAML의 구문. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1031
Visual Studio 2008을 사용하여 WPF 애플리케이션 구축. . . . . . . . . . . . . . . . . . . . . 1044
런타임 시 XAML 처리: SimpleXamlPad.exe . . . . . . . . . . . . . . . . . . . . . . 1048
Microsoft Expression Blend의 역할. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1052
요약 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1053
xii 목차
nCHAPTER 29 WPF 컨트롤을 사용한 프로그래밍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1055
WPF 컨트롤 라이브러리에 대한 조사. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1055
XAML에서 컨트롤 선언 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1058
종속성 속성의 역할 이해. . . . . . . . . . . . . . . . . . . . . . 1060
라우트된 이벤트 이해. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1064
버튼 유형 작업 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1068
CheckBox 및 RadioButton 작업. . . . . . . . . . . . . . . . . . . . . . . . . . . 1072
ListBox 및 ComboBox 유형 작업. . . . . . . . . . . . . . . . . . . . . . . . 1075
텍스트 영역 작업 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1081
패널을 사용하여 콘텐츠 레이아웃 제어. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1083
중첩된 패널을 사용하여 창 프레임 만들기 . . . . . . . . . . . . . . . . . . . . . . . 1093
WPF 제어 명령 이해. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1099
WPF 데이터 바인딩 모델 이해. . . . . . . . . . . . . . . . . . . . . . . . . . . 1102
IValueConverter를 사용한 데이터 변환. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1106
사용자 정의 개체에 바인딩. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1108
UI 요소를 XML 문서에 바인딩. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1112
요약 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1116
nCHAPTER 30 WPF 2D 그래픽 렌더링, 리소스 및 테마 . . . . . . . . . 1117
WPF 그래픽 렌더링 서비스의 철학. . . . . . . . . . . . . . . . . . . . 1117
모양 파생 유형 탐색 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1124
WPF 브러시로 작업하기. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1127
WPF 펜으로 작업하기. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1130
도면 파생 유형 탐색 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1130
UI 변환의 역할. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1135
WPF의 애니메이션 서비스 이해. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1136
WPF 리소스 시스템 이해. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1145
WPF 컨트롤에 대한 스타일 정의 및 적용. . . . . . . . . . . . . . . . . . . . . . . . . 1147
템플릿을 사용하여 컨트롤의 UI 변경 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1156
요약 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1160
7부 nnn ASP.NET을 사용하여 웹 애플리케이션 구축
nCHAPTER 31 ASP.NET 웹 페이지 구축 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1163
HTTP의 역할. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1163
웹 애플리케이션 및 웹 서버 이해. . . . . . . . . . . . . . . . . . . . . . 1164
HTML의 역할. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1167
클라이언트측 스크립팅의 역할. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1172
양식 데이터 제출(GET 및 POST) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1174
클래식 ASP 페이지 구축. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1175
클래식 ASP의 문제. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1177
ASP.NET 네임스페이스. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1178
ASP.NET 웹 페이지 코드 모델. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1179
ASP.NET 웹사이트 디렉토리 구조의 세부 사항. . . . . . . . . . . . . . . . . . . . . . 1190
ASP.NET 페이지 컴파일 주기. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1192
n목차 xiii
페이지 유형의 상속 체인. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1194
들어오는 HTTP 요청과 상호 작용합니다. . . . . . . . . . . . . . . . . . . . . . . . . . . 1195
나가는 HTTP 응답과 상호 작용합니다. . . . . . . . . . . . . . . . . . . . . . . . . . 1198
ASP.NET 웹 페이지의 수명 주기. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1200
Web.config 파일의 역할. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1203
요약 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1206
n32장 ASP.NET 웹 컨트롤, 테마 및 마스터 페이지. . . . . . . . . . . . 1207
웹 컨트롤의 특성 이해. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1207
System.Web.UI.Control 유형. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1209
System.Web.UI.WebControls.WebControl 유형입니다. . . . . . . . . . . . . . . . . . . . . . 1213
ASP.NET 웹 컨트롤의 주요 범주. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1213
기능이 풍부한 ASP.NET 웹사이트 구축. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1215
검증 통제의 역할. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1231
테마 작업 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1237
HTML 테이블을 사용한 위치 제어. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1243
요약 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1244
n33장 ASP.NET 상태 관리 기술 . . . . . . . . . . . . . . . . . . . . . . . 1245
국가의 문제. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1245
ASP.NET 상태 관리 기술. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1247
ASP.NET 뷰 상태의 역할 이해. . . . . . . . . . . . . . . . . . . . . . . . . 1248
Global.asax 파일의 역할. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1251
애플리케이션/세션 구별 이해. . . . . . . . . . . . . . . . . . . . . . 1254
애플리케이션 캐시 작업 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1259
세션 데이터 유지. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1263
쿠키 이해. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1267
요소의 역할. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1269
ASP.NET 프로필 API 이해. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1272
요약 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1279
파트 8 nnn 부록
n부록 A COM과 .NET 상호 운용성. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1283
.NET 상호 운용성의 범위. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1283
.NET에서 COM Interop으로의 간단한 예. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1284
.NET Interop 어셈블리 조사 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1287
런타임 호출 가능 래퍼 이해 . . . . . . . . . . . . . . . . . . . . . . . . . . 1289
COM IDL의 역할. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1292
형식 라이브러리를 사용하여 Interop 어셈블리 빌드. . . . . . . . . . . . . . . . . . . . . . 1296
보다 정교한 COM 서버 구축. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1299
Interop 어셈블리 검사 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1301
COM과 .NET의 상호 운용성을 이해합니다. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1305
CCW의 역할. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1306
.NET 클래스 인터페이스의 역할. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1307
xiv n목차
.NET 유형 구축. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1308
유형 라이브러리 생성 및 .NET 유형 등록. . . . . . . . . . . . . . 1310
내보낸 유형 정보를 검토합니다. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1311
Visual Basic 6.0 테스트 클라이언트 구축. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1312
요약 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1313
nAPPENDIX B Mono를 사용한 플랫폼 독립적인 .NET 개발. . . . . . . . . . . 1315
.NET의 플랫폼 독립적 특성. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1315
Mono 획득 및 설치 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1318
모노 개발 도구. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1321
Mono를 사용하여 .NET 애플리케이션 구축 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1323
추가 연구를 위한 제안. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1330
요약 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1331
nINDEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1333
확장하다