Top

Essential C# 5.0 한국어판 [C#의 기초와 고급을 아우르는 핵심 바이블]

  • 원서명Essential C# 5.0 (4th Edition) (Microsoft Windows Development Series) (ISBN 9780321877581)
  • 지은이마크 미카엘리스, 에릭 리퍼트
  • 옮긴이김도균, 안철진
  • ISBN : 9788960775572
  • 50,000원
  • 2014년 05월 30일 펴냄
  • 페이퍼백 | 968쪽 | 188*250mm
  • 시리즈 : 프로그래밍 언어

판매처

개정판

책 소개

요약

C# 언어를 기초부터 고급까지 포괄적으로 다루는 이 책은 학습에 필요한 내용을 전달하면서 한편으로는 효과적인 소프트웨어 개발 착수에 필요한 이론적 토대도 제공한다. 또한 C# 프로그래밍 패러다임에 대한 통찰력을 제공할 뿐만 아니라, C# 5.0과 닷넷 프레임워크 4.5라는 최신 버전에 도입된 기능도 다룬다. 시간이 지나도 변하지 않는 가치를 제공해줄 책으로서, 이미 C#에 익숙한 사람에게도 늘 유용한 참고서가 될 것이다.

이 책에서 다루는 내용

■ C#의 데이터 형식, 흐름 제어, 메소드, 매개변수
■ 클래스, 상속, 인터페이스 등을 포함하는 C# 개체 지향(object-oriented) 구조
■ 신뢰할 수 있고 효과적인 예외 처리 코드 작성
■ 코드 복잡성을 낮추기 위한 제네릭, 대리자, 람다 식, 이벤트의 사용
■ 리플렉션과 특성을 사용한 동적 프로그래밍
■ LINQ와 쿼리 식을 사용해 거의 모든 데이터 형식을 아우르게 질의문을 작성
■ 비즈니스 개체를 다루는 사용자 지정 컬렉션 생성
■ 닷넷 4.5 개발 플랫폼의 CLR(Common Language Infrastructure)과 C#
■ 선언형 프로그래밍과 내포된 메타데이터, 리플렉션, 특성의 활용
■ 새로운 async/await 패러다임을 포함한 다중스레딩과 동기화
■ WinRT와 윈도우 8을 위한 C# 프로그래밍
■ P/Invoke와 포인터, 직접 메모리 조작을 사용한 다른 언어의 코드와 상호작용
■ C# 프로그램과 기본 런타임의 관계

이 책의 대상 독자

이 책이 의도하는 바는 어셈블리, 링크, 체인, 스레드, 퓨전과 같은 단어를 사용해 초보자를 겁먹게 하지 않으면서도, 해당 주제가 프로그래머보다는 대장장이에게 더 어울리더라도 고급 개발자를 깨우치게 하는 데 있다. 이 책의 주요 독자는 구사할 수 있는 개발 언어에 또 다른 언어를 추가하고자 하는 경험 있는 개발자다. 하지만 이 책은 대부분의 수준에 해당하는 개발자에게 중요한 가치를 제공하도록 신중하게 만들었다.

이 책의 구성

1장, C# 소개: C#으로 작성한 HelloWorld 프로그램을 보인 후 분석해본다. 독자가 C# 프로그램의 룩앤필에 익숙할 수 있게 하고 프로그램을 컴파일하고 디버깅하는 방법도 자세히 설명한다. C# 프로그램의 실행 콘텍스트와 중간 언어도 잠깐 설명한다.

2장, 데이터 형식: 프로그램은 작동하면서 데이터를 처리한다. 2장에서는 C#의 기본 데이터 형식을 소개한다. 값 형식과 참조 형식이라는 두 가지 형식 범주와 형식들 간의 변환, 배열에 대한 지원 사항을 다룬다.

3장, 연산자와 제어 흐름: 컴퓨터에서 반복 기능의 이점을 이용하려면, 프로그램 내의 루프와 조건 로직을 포함하는 방법을 알아야 한다. 3장에서는 C# 연산자와 데이터 변환, 전처리 지시문도 다룬다.

4장, 메소드와 매개변수: 4장에서는 메소드와 매개변수의 세부 사항을 탐구한다. 값에 의한 전달과 참조에 의한 전달, out 매개변수를 통한 데이터 반환을 포함한다. C# 4.0에서 기본 매개변수 지원이 추가되었으며 4장에서 이를 사용하는 방법을 설명한다.

5장, 클래스: 클래스라는 기본 빌딩 블록이 제공되므로, 5장에서는 이들 구문을 함께 결합해 전체 기능 형식을 구성한다. 클래스는 개체(object)에 대한 템플릿을 정의함으로써 개체 지향 기술의 핵심을 형성한다.

6장, 상속: 상속은 많은 개발자에게 프로그래밍 토대를 제공해주지만, C#은 new 한정자와 같은 다소 고유한 구조를 제공한다. 6장에서는 재정의(overriding)를 포함해 상속 구문의 세부 사항을 설명한다.

7장, 인터페이스: 7장은 클래스 간에 버전을 지정할 수 있는 상호작용 계약을 정의하는 데 인터페이스를 사용하는 방식을 설명한다. C#에서는 명시적 및 암시적 인터페이스 멤버 구현 모두를 포함하며, 대부분의 다른 언어에서 지원하지 않는 추가적인 캡슐화 수준을 사용할 수 있다.

8장, 값 형식: 참조 형식을 정의하는 것처럼 일반적이진 않지만, C#에 내장된 기본 형식과 유사한 방식으로 동작하는 값 형식을 정의해야 할 때가 가끔 있다. 8장은 구조체를 정의하는 방법과 이들 구조체에서 드러내는 고유한 특성을 설명한다.

9장, 잘 구성된 형식: 9장은 더 고급 형식 정의를 설명한다. +와 형변환처럼 연산자를 구현하는 방법을 설명하고 여러 클래스를 단일 라이브러리로 캡슐화하는 방법을 다룬다. 이 장에서는 네임스페이스와 XML 주석을 정의하는 방법을 나타내고, 가비지(garbage) 수집을 위해 클래스를 설계하는 방법을 설명한다.

10장, 예외 처리: 4장에서 소개한 예외 처리를 확장하고, 사용자 지정 예외를 생성해 예외 계층 구조를 따르게 하는 방법을 설명한다. 예외 처리의 모범 사례도 몇 가지 설명한다.

11장, 제네릭: 제네릭(generic)은 C# 1.0에서 빠진 핵심 기능이다. 11장에서는 C# 2.0 기능 전체를 다룬다. 11장에서 제네릭이라는 맥락에서 C# 4.0에서 지원을 추가한 공변(covariance)과 반공변(contravariance)을 다룬다.

12장, 대리자와 람다식: 대리자(delegate)는 코드 내에서 이벤트 처리를 위한 패턴을 정의하는 이전의 언어와 C#을 명확히 구별 짓기 시작했다. 대리자는 사실상 폴링 루틴(falling routine)을 작성할 필요성을 제거했다. 람다식은 C# 3.0의 LINQ를 가능하게 한 핵심 개념이다. 12장에서는 람다 식에서 더 우아하고 간결한 구문을 제공함으로써 대리자 구문을 만드는 방법을 설명한다. 12장은 다음에 설명한 새로운 컬렉션 API에 대한 토대다.

13장, 이벤트: 캡슐화된 대리자인 이벤트는 CLR(Common Language Runtime)의 핵심 구문이다. C# 2.0의 또 다른 기능인 익명 메소드도 여기서 설명한다.

14장, 컬렉션 인터페이스와 표준 질의 연산자: C# 3.0에서 소개된 간단하면서도 세련되고 강력한 변화는 새로운 Enumerable 클래스의 확장 메소드를 찾을 때 14장에서 한 줄기 빛을 비춰준다. 이 클래스를 사용하면 표준 질의 연산자인 완전히 새로운 컬렉션 API를 사용할 수 있으므로, 여기서 이를 자세히 살펴본다.

15장, LINQ와 질의 식: 표준 쿼리 연산자를 단독으로 사용하면 해독하기 어려운 긴 구문이 나올 수 있다. 하지만 질의 식은 SQL과 유사한 대체 구문을 제공하는데, 15장에서는 이를 설명한다.

16장, 사용자 지정 컬렉션 만들기: 비즈니스 개체를 대상으로 동작하는 사용자 지정 API를 만듦에 있어, 사용자 지정 컬렉션을 생성해야 할 때가 있다. 16장에서는 이를 생성하는 방법을 상세하게 다루며, 이런 과정에서 사용자 지정 컬렉션을 더 쉽게 만드는 상황에 맞는 키워드를 소개한다.

17장, 리플렉션, 특성, 동적 프로그래밍: 개체 지향 프로그래밍은 1980년대 후반의 프로그램 구조에서 패러다임이 변화하는 단초를 제공했다. 마찬가지 방식으로 특성은 선언형 프로그래밍과 메타데이터의 포함을 용이하게 해 새로운 패러다임을 안내했다. 17장에서는 특성을 살펴보고 리플렉션을 통해 이들 특성을 가져오는 방법을 설명한다. BCL(Base Class Library) 내에서 직렬화 프레임워크로 하는 파일 입력과 출력도 다룬다. C# 4.0에서는 새로운 키워드인 dynamic이 언어에 추가되었다. 이 키워드는 C#으로 할 수 있는 일의 중요한 확장으로 런타임 때까지 모든 형식 검사를 제거했다.

18장, 다중 스레딩: 대부분의 현대 프로그램에서는 동시 이벤트에 능동적으로 응답하도록 하면서 오랫동안 돌아가는 작업을 실행하는 스레드의 사용을 필요로 한다. 프로그램이 더 복잡해짐에 따라, 이들 고급 환경에서 데이터를 보호하기 위해 추가적인 예방 조치를 취해야 한다. 다중 스레드를 적용한 애플리케이션 프로그래밍은 복잡하다. 18장은 스레드를 사용하는 방법을 설명하고 다중 스레드 애플리케이션을 괴롭히는 문제를 피하는 모범 사례를 제공한다.

19장, 스레드 동기화: 앞 장에서 다룬 내용을 기반으로, 19장에서는 다중스레드 코드의 명시적 제어를 단순화할 수 있는 내장 스레딩 패턴 지원을 설명한다.

20장, 플랫폼 상호 운용성과 안전하지 않은 코드: C#은 비교적 젊은 언어이므로, C#보다는 다른 언어로 작성된 코드가 상당히 많다. 이런 기본 코드의 이점을 누리기 위해, C#은 P/Invoke를 통해 비관리 코드와의 상호 운영성을 지원한다. 게다가 C#에서는 포인터의 사용과 직접 메모리 조작을 지원한다. 포인터를 사용한 코드는 실행에 특수 권한을 필요로 하지만, 전통적인 C 기반 애플리케이션 프로그래밍 인터페이스와 완전히 상호작용하는 강력함을 제공한다.

21장, 공용 언어 인프라(CLI): 근본적으로 C#은 기본 CLI 위에 가장 효과적인 프로그래밍 언어로 설계된 구문을 갖는다. 21장에서는 C# 프로그램이 기본 런타임과 런타임의 명세와 어떤 관련이 있는지 깊이 살펴본다.

부록 A, C# 컴파일러와 CLI 플랫폼 다운로드와 설치: 부록 A에서는 마이크로소프트 닷넷이나 모노와 같은 C# 컴파일러와 코드를 실행하는 플랫폼을 설정하는 내용을 설명한다.

부록 B, 3목 놀이 소스 코드 예제: 부록 B는 3장과 4장의 일부로 나타낸 소스 코드의 전체 목록을 제공한다.

부록 C, TPL과 C#5.0 이전의 다중 스레드 패턴: 부록 C에서는 C# 5.0 이전의 개발을 위한 다중스레드 패턴과 TPL(Task Parallel Library)에 대한 세부 내용을 설명한다.

부록 D, C# 5.0의 Async/Await 패턴 이전의 타이머: 부록 D에서는 .NET 4.5/C# 5.0을 사용할 수 없을 때 사용하기 위한 3가지 다른 형식의 타이머를 설명한다.

C# 3.0, 4.0, 5.0 색인: 이들 색인에서는 C# 3.0~5.0에서 추가된 기능을 빨리 찾아 볼 수 있는 참조를 제공한다. 이들 색인은 더 최근 버전으로 언어 스킬을 빠르게 올리고 싶어 하는 프로그래머를 돕고자 특별히 고려한 것이다.

저자/역자 소개

저자 소개

마크 미카엘리스(Mark Michaelis)

인텔리텍트(IntelliTect)의 창업자이며 수석 아키텍트와 트레이너로 활동한다. 1996년부터 C#과 비주얼 스튜디오 팀 시스템(Team System), 윈도우 SDK 분야의 MVP로 활동하고 있으며, 2007년에는 마이크로소프트 지역감독(Regional Director)로 인정받았다. C#과 커넥티드시스템, 오피스/셰어포인트, 비주얼스튜디오 등을 포함해, 마이크로소프트 소프트웨어 설계 리뷰 팀 등에서도 활동한다. 개발자 컨퍼런스에서 발표자로 활동하며 수많은 기사를 쓰고 여러 책을 집필했다. 일리노이 주립대학에서 철학 학사 학위를 받았고 일리노이 공과 대학에서 컴퓨터과학 석사 학위를 받았다. 컴퓨터와 씨름하지 않을 때는 가족과 함께 바쁘게 지내며 가끔 철인 3종 경기 훈련에 참가하기도 한다. (마크는 2008년에 처음으로 철인 경주를 완주했다). 아내 엘리자베스와 세 자녀인 벤자민, 한나, 아비가일과 함께 워싱턴 주에 있는 스포캔에서 살고 있다.

에릭 리퍼트(Eric Lippert)

마이크로소프트 C# 컴파일러 팀의 수석 개발자다. 비주얼베이직과 VBScript, Jscript, C# 언어의 설계와 구현에 참가했으며 오피스용 비주얼스튜디오 툴스 팀에서도 일했다. C# 언어 설계 팀의 멤버이기도 하다. C#에 관한 책을 쓰지 않을 때는 작은 요트를 타며 멋지고 즐겁게 시간을 보낸다. 시애틀에서 아내 리아와 함께 살고 있다.

옮긴이의 말

새로운 밀레니엄이 시작될 무렵에 발표된 C#이 초기에는 자바를 베낀 언어라는 조소를 많이 받았지만 지금은 상황이 많이 바뀌었습니다. 그 동안 자바의 아버지라 불리던 제임스 고슬링은 썬마이크로시스템즈를 오라클이 인수하는 격랑 속에서 자바의 가치를 높이는 역할을 내려놓았고, 자바의 성공에 뛰어난 업적을 쌓았던 많은 인물들도 자바를 떠나 다른 곳으로 눈을 돌렸습니다. 오라클에 인수된 자바의 발전은 너무나 더뎠고 그 사이에 많은 탄식과 아쉬움이 오고갔습니다. 자바가 정체되어 있는 동안 C#은 10년 넘게 진화를 거듭해 점점 함수형 언어인 스칼라(Scala)를 닮아가고 있는 듯합니다. C# 1.0에서 기초를 닦은 속성과 대리자라는 기능은, 후에 자바 진영에 속한 많은 사람들이 간절히 바라기는 했지만 끝내 이루지 못한, 익명 메소드에서 람다로의 진화를 이끌었습니다. 호출자 정보와 비동기에 대한 기능까지 도입한 C# 버전이 이제 5.0에까지 이르렀습니다. 어쩌면 요즘의 애플과 삼성의 관계에서처럼 C#이 처음엔 자바의 빠른 추종자(fast follower)였을지 모르지만, 지금은 C#이 현대 프로그래밍 언어의 패러다임을 선도하는 위치에 올라서려는 시점에 온 것도 같습니다.

이 책은 C# 프로그래밍 학습에 있어 시간이 지나도 변하지 않는 가치를 제공해주며, C#에 익숙한 사람에게도 여전히 유용한 참고서로 남을 책입니다. C# 언어를 포괄적으로 다루면서도 학습용 교재 수준을 넘어 효과적인 소프트웨어 개발 착수에 필요한 이론적 토대를 제공합니다. 이 책에서는 C# 프로그래밍 패러다임에 대한 통찰력을 제공하며, C# 5.0과 닷넷 프레임워크 4.5라는 최신 버전에서 도입한 기능을 다루고 있습니다. 이 책을 번역한 역자들의 바람이 있다면, 이 책을 통해 C# 이라는 언어를 마이크로소프트라는 프레임에서 보지 않고 프로그래밍 언어의 발전이라는 관점에서 보면서 C#의 가능성에 주목해줬으면 하는 것입니다. 이 책의 번역 용어는 마이크로소프트 언어 포탈의 기준을 따랐지만 일부는 업계에 통용되는 용어를 사용했음을 알려 드립니다.
김도균

어느덧 C#이 세상에 나온 후 강산이 바뀌고도 한참의 세월이 흘렀습니다. 어린 시절의 나에게 가장 큰 영향을 끼쳤던 두 가지 언어인 베이직과 C의 경우에는 아쉽게도 그러지 못했지만 C#의 경우에는 출현부터 현재에 이르는 과정을 먼 발치에서 지켜볼 수 있었는데, 이처럼 훌륭한 저서를 접하고 또 소개할 수 있는 기회를 가지는 행운까지 만끽하게 되었습니다. 우리가 태어나서 앞 세대로부터 교육을 받으며 자라나 더 나은 세대가 되고자 노력하고 또 그렇게 꾸준히 무언가를 이루어가며 살아가는 것처럼, 프로그래밍 언어도 마치 생명체와 같이 탄생, 학습, 성장 등과 같은 생명 주기를 지니는 것으로 본다. 물론 이러한 생명력을 부여하는 존재 또한 역자나 독자와 같은 인간이기에 프로그래밍 언어가 생명체라고 정의할 수는 없지만, 어떤 면에서는 그렇기에 더욱 인간적인 면들이 프로그래밍 언어에 나타나는 것은 아닌가라는 생각도 해 봅니다.

C#은 이제 어느 정도 성숙한 느낌을 주는 언어가 되었습니다. 앞서 나온 언어들에서 구현된 많은 면을 그대로 계승해 좋은 점을 발전적으로 이어 나가면서, C#의 강점 가운데 하나로 꼽는 높은 생산성마저도 꾸준히 개선해 나가고 있습니다. C#의 단점이라면 한 번 C#을 경험한 프로그래머가 이전에 쓰던 언어로 돌아가기가 쉽지 않다는 점 정도가 아닐까 합니다.

이처럼 발전을 이뤄낸 모습을 지니고 있지만, 초기보다 불가피하게 덩치가 커지고 복잡해졌습니다. 그래서 C#을 제대로 알고 사용하려면 어쩔 수 없이 더 노력해야 하게 되었는데, 이는 개발자에게 부담으로 작용합니다. 다행히 '제대로 알고 정확하게 사용'하는 데 도움이 될 멋진 지침서 가운데 하나가 바로 지금 여러분의 눈앞에 있다고 감히 이야기 하고 싶습니다. 책을 번역하면서 개발자인 저로서도 수년간 당연시하며 사용하던 코드의 내막들을 깨닫고 고개를 수없이 끄덕였습니다. C#을 닷넷의 일부가 아닌 언어 자체로 보고 언어에 대한 탐구를 즐기고자 하거나 초급에서 벋어나 중/고급 개발자를 향해 열정을 불태우고자 한다면 이 책이 큰 도움이 될 것이라고 믿습니다.
안철진

옮긴이 소개

김도균

‘강철 벼룩’이라는 필명으로 활동하며 ‘글 쓰는 엔지니어’로 살고 있다. 마이크로소프트의 공인 강사MCT이자 MVP이며, 최근 출간한 저서 『나홀로 개발자를 위한 안드로이드 프로그래밍』를 비롯해 20여 권의 역서를 출간한 전문기술서 번역가다. 해적 라이프를 추구하는 라이프스타일 이노베이터로 창의성과 상상력의 불꽃이 튀는 해적들이 모인 기술 전문가 해적 집단인 GoDev(www.godev.kr)의 선장이다. 월간 「마이크로소프트웨어」의 칼럼니스트로도 활동 중이며, 프리지아랩(www.dokyun.pe.kr)이라는 블로그를 통해 기술적 관심사를 공유하고 있다.

안철진

초등학교 시절 베이직과 포트란으로 애플2를 괴롭히기 좋아했고, 중/고등학교 때는 대세에 따라 입시와 씨름했다. 대학에서 기계공학부를 전공했지만, 소프트웨어 개발에 흥미를 느껴 동아리 활동에 힘쓰고 전산과 수업을 듣기에만 급급하다가 결국 소프트웨어 개발자로 사회에 나서게 되었다. 도담시스템스를 거쳐 현재는 KTDS에 근무하며 꾸준히 개발 업무를 수행하고 있으며, GoDev 멤버로도 활동 중이다.

목차

목차
  • 1장 C# 소개
  • Hello, World
  • C# 구문 기초
  • 콘솔 입력과 출력
  • 요약

  • 2장 데이터 형식
  • 기본 숫자 형식
  • 더 알아야 할 기본 형식
  • null과 void
  • 형식 분류
  • 형 변환
  • 배열
  • 요약

  • 3장 연산자와 흐름 제어
  • 연산자
  • 흐름 제어 소개
  • 코드 블록({})
  • 코드 블록과 범위, 선언 공간
  • 불 식
  • 비트 단위 연산자(<<, >>, |, &, ^, ~)
  • 흐름 제어 구문(계속)
  • 점프 문
  • C# 전처리 지시문
  • 요약

  • 4장 메소드와 매개변수
  • 메소드 호출
  • 메소드 선언
  • using 지시문
  • Main()의 반환과 매개변수
  • 고급 메소드 매개변수
  • 재귀
  • 메소드 오버로딩
  • 선택적 매개변수
  • 예외를 사용한 기본 에러 처리
  • 요약

  • 5장 클래스
  • 클래스 선언과 인스턴스 생성
  • 인스턴스 필드
  • 인스턴스 메소드
  • 접근 한정자
  • 속성
  • 생성자
  • 정적 멤버
  • 정적 클래스
  • 확장 메소드
  • 데이터 캡슐화
  • 중첩 클래스
  • 부분 클래스
  • 요약

  • 6장 상속
  • 파생
  • 기본 클래스 재정의
  • 추상 클래스
  • System.Object에서 파생된 모든 클래스
  • is 연산자를 사용한 기본 형식 확인
  • as 연산자를 사용한 변환
  • 요약

  • 7장 인터페이스
  • 인터페이스 소개
  • 인터페이스를 통한 다형성
  • 인터페이스 구현
  • 클래스와 인터페이스 구현 간의 변환
  • 다중 인터페이스 상속
  • 인터페이스에서 확장 메소드
  • 인터페이스를 통한 다중 상속 구현
  • 인터페이스와 클래스 비교
  • 인터페이스와 특성 비교
  • 요약

  • 8장 값 형식
  • 구조체
  • 박싱
  • 열거형
  • 요약

  • 9장 잘 구성된 형식
  • object 멤버 재정의
  • 네임스페이스 정의
  • XML 주석
  • 리소스 정리
  • 지연 초기화
  • 요약

  • 10장 예외 처리
  • 다중 예외 형식
  • 예외 잡기
  • 일반 catch 블록
  • 예외 처리를 위한 지침
  • 사용자 지정 예외 정의
  • 예외 래핑과 다시 던지기
  • 요약

  • 11장 제네릭
  • 제네릭 없는 C#
  • 제네릭 형식 소개
  • 제약 조건
  • 제네릭 메소드
  • 공변과 반공변
  • 제네릭의 내부
  • 요약

  • 12장 대리자와 람다 식
  • 대리자 소개
  • 람다 식
  • 범용 대리자(System.Func와 System.Action)
  • 식 트리
  • 요약

  • 13장 이벤트
  • 멀티캐스트 대리자를 이용한 Observer 패턴 구현
  • 이벤트
  • 요약

  • 14장 컬렉션 인터페이스와 표준 질의 연산자
  • 익명 형식과 암시적 형식의 지역 변수
  • 컬렉션 이니셜라이저
  • 클래스를 컬렉션으로 만들어주는 IEnumerable<T>
  • 표준 질의 연산자
  • 요약

  • 15장 LINQ와 질의 식
  • 질의 식 소개
  • 질의 식은 메소드 호출이다
  • 요약

  • 16장 사용자 지정 컬렉션
  • 기타 컬렉션 인터페이스
  • 주요 컬렉션 클래스
  • 인덱서 지원
  • Null 혹은 빈 컬렉션의 반환
  • 반복기
  • 요약

  • 17장 리플렉션, 특성, 동적 프로그래밍
  • 리플렉션
  • 특성
  • 동적 개체를 이용하는 프로그래밍
  • 요약

  • 18장 다중 스레딩
  • 다중 스레딩 기초
  • System.Threading 활용
  • 비동기 태스크
  • 태스크 취소
  • C# 5.0의 태스크 기반 비동기 패턴
  • 루프 반복의 병렬 처리
  • LINQ 질의의 병렬 실행
  • 요약

  • 19장 스레드 동기화
  • 왜 동기화가 필요한가?
  • 타이머
  • 요약

  • 20장 플랫폼 상호 운용성과 안전하지 않은 코드
  • C#을 통한 윈도우 런타임 활용
  • 플랫폼 호출
  • 포인터와 주소
  • 대리자를 통한 안전하지 않은 코드 실행
  • 요약

  • 21장 공통 언어 기반
  • 공통 언어 기반의 정의
  • CLI 구현
  • C#을 기계어로 컴파일
  • 런타임
  • 응용 프로그램 도메인
  • 어셈블리, 매니페스트, 모듈
  • 공통 중간 언어
  • 공통 형식 시스템
  • 공통 언어 사양
  • 기본 클래스 라이브러리
  • 메타데이터
  • 요약

  • 부록 A C# 컴파일러와 CLI 플랫폼의 다운로드 및 설치
  • 마이크로소프트 닷넷

  • 부록 B Tic-Tac-Toe 소스 코드 예제

  • 부록 C TPL과 C# 5.0 이전의 다중 스레드 패턴
  • 비동기 프로그래밍 모델
  • 비동기 대리자 호출
  • 이벤트 기반 비동기 패턴(EAP)
  • 백그라운드 작업자 패턴
  • 윈도우 UI로의 디스패치

  • 부록 D C# 5.0의 Async/Await 패턴 이전의 타이머

도서 오류 신고

도서 오류 신고

에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

(예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안

정오표

정오표

1쇄 수정사항

[ p78 수정 번역 ]

이중 인용부호를 위한 이스케이프 시퀀스는 [출력에 포함시키는 이중 인용부호로 문자열의 시작과 끝에 정의한 이중 인용부호와는 다르다.]

C#에서 @ 기호를 문자열 앞에 사용해 [역슬래시를 이스케이프 시퀀스의 시작으로 해석되지 않도록 할 수 있다. 축자 문자열 리터럴의 결과는 해당 역슬래시 문자를 재해석하지 않는다.]
공백 또한 @ 문자열 구문을 사용할 때 축자 문자열로 취급된다. 예를 들면, 예제 2.12의 삼각형은 역슬래시와 새줄, 들여쓰기를 포함해 정확히 콘솔에 표시된다. 결과 2.10에서 해당 결과를 나타냈다.


예제 2.12 축자 문자열 리터럴을 사용해 삼각형 표시하기


결과 2.10

@ 문자가 없다면 이 코드는 컴파일도 되지 않을 것이다. [사실, 역슬래시를 제거하고 모양을 사각형으로 변경하더라도, @ 기호를 서두에 달지 않은 문자열 내에 새 줄이 들어갈 수 없기 때문에 이 코드는 여전히 컴파일이 되지 않는다.]

축자 문자열을 지원하는 유일한 이스케이프 시퀀스는 [이중 인용부호(“”)이며, 이때는 해당 축자 문자열을 끝내는 표시가 아니다.]


언어비교: 컴파일 타임에 C++ 문자열 연결

C++과 달리, C#은 자동으로 리터럴 문자열을 연결하지 않는다. [예를 들면 다음처럼 문자열 리터럴을 지정할 수 없다.]

[ p43 내용 수정 ]

C 스타일 전처리기와 달리
-> C 스타일의 이전 언어와 달리

2014.12.10 수정사항

[p.184 : 타입이름 아래 1행]
~ 타임 이름 한정자가 필요하다.
-> 타입 이름 한정자가 필요하다.

[p.226 : 1행]
throw 문을 사용한 예러 보고
-> throw 문을 사용한 에러 보고

2015. 2. 9 수정사항

[p.129 : 1~3행]
// 표시: 126, 127, 128
System.Console.WriteLine("{0}, {1}, {2}", ++x, ++x, x);
// x는 이제 128이라는 값을 포함한다.

->

//표시: 126, 127, 127
System.Console.WriteLine("{0}, {1}, {2}", ++x, ++x, x);
//x는 이제 127이라는 값을 포함한다.

2015. 10. 8 수정사항

[p.121: 10행]
16진수로 0x167이거나 -> 16진수로 0x67이거나