Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
(연관된 글이 6개 있습니다.)

도서: 시작하세요! C# 7.1 프로그래밍: 기본 문법부터 실전 예제까지

기존에 출판되었던,

시작하세요! C# 프로그래밍 기본 문법부터 실전 예제까지
; http://www.yes24.com/24/goods/11257753?scode=032

시작하세요! C# 6.0 프로그래밍 기본 문법부터 실전 예제까지
; http://www.yes24.com/24/goods/19427525?scode=032

"시작하세요! C# 프로그래밍"의 7.0/7.1 개정판이 나왔습니다.

위키북스 - 시작하세요! C# 7.1 프로그래밍: 기본 문법부터 실전 예제까지 
; http://wikibook.co.kr/beginning-csharp-71/

Yes24 - 시작하세요! C# 7.1 프로그래밍 기본 문법부터 실전 예제까지
; http://www.yes24.com/24/goods/48156128?scode=032&OzSrank=1

이 책에서 바뀐 점은 다음과 같습니다.

  • C# 7.0/7.1 문법 설명 추가
  • 닷넷 코어와 닷넷 스탠다드의 개요 설명 추가
  • 비주얼 스튜디오 2017 / SQL Server 2016 기준으로 화면 업데이트

이번에도 책의 두께 문제로 초판에서 발행했던 3부의 내용은 PDF 파일로 공개됩니다.

공개된 3부 - PDF 파일
; https://www.sysnet.pe.kr/book/cs7_free.pdf

책에서 혹시 이해가 안되거나 궁금하신 부분이 있으면 다음의 게시판을 활용해 주시면 답변을 드리도록 하겠습니다. (물론, 오타나 문장이 이상한 부분이 있는 것도 게시판을 통해 알려주시면 반영하겠습니다.)

질문 답변 게시판
; https://www.sysnet.pe.kr/3/0

책에 있는 예제는 다음의 경로에서 다운로드 받을 수 있고,

소스코드 다운로드(단일 ZIP 파일)
; https://www.sysnet.pe.kr/book/cs7_sample_code.zip

* 소스코드를 비주얼 스튜디오 2017 (15.3.1버전)에서 열은 후, 테스트하고 싶은 프로젝트를 "시작 프로젝트로 설정" 메뉴로 지정하면 됩니다. 
("시작 프로젝트로 설정" 메뉴에 대해서는 책의 295페이지에 있는 "Note" 내용에서 좀 더 자세하게 알 수 있습니다.)

* 처음 CSharp7.sln 솔루션을 로드 후 빌드하면 오류가 발생할 수 있습니다. 
일부 프로젝트의 경우 NuGet 패키지 구성 시간이 걸려 그런 것이므로 1~2분 정도 후에 다시 빌드하면 됩니다.

6장에서 만드는 SQL 데이터베이스 파일
; https://www.sysnet.pe.kr/book/cs7_book_db_file.zip

압축을 풀면 나오는 "CSharp7.sln" 파일을 비주얼 스튜디오 2017 (15.3.1버전)에서 열면 다음과 같이 솔루션 탐색기(Solution Explorer)에서 장(Chapter) 별로 나누어져 있어 찾기 편하도록 구성했습니다.

sample_code7_sln.png

소스 코드 프로젝트 중에서 11장까지는 책에서 "예제" 제목이 달린 소스 코드마다 완전히 실행 가능한 C# 프로젝트를 만들었습니다. 또한, "예제" 제목이 달리지 않은 소스코드도 모두 "부가코드-[번호].txt"라는 파일에 담아 두었습니다. 각각의 txt 파일도 복사해서 붙여넣으면 컴파일이 되는 하나의 독립적인 예제입니다.

하지만 12장 ~ 13장은 "예제" 제목이 달린 프로젝트가 해당 절에 포함된 소스 코드와 일치합니다.

이번에도 책에 포함된 모든 그림 파일을 다음의 경로에 공개해 두었습니다.

책에 포함된 그림
; https://www.sysnet.pe.kr/book/cs7_img.zip

캡쳐된 그림 이외에 다이어그램을 그리기 위해 사용한 PPT 파일도 아래에 공개했습니다. (일부 다이어그램은 출판사 측에서 인쇄를 위해 재편집을 했기 때문에 원본과 다를 수 있습니다.)

다이어그램 원본 PPT 파일
; https://www.sysnet.pe.kr/book/cs7_diagram.pptx

(혹시 이 파일에 실린 다이어그램을 좀 더 멋지게 그리셨다면 제 책에 실을 수 있도록 공유 부탁드립니다. ^^)

마지막으로, 공개된 PDF의 14~15장 내용에 대해서는 책의 서문에 쓴 내용을 공지합니다.

이 중에서 3부의 내용은 좀 더 부가 설명이 필요하다. 필자가 쓴 책은 C# 5.0을 대상으로 처음 쓰여졌으며 3부의 내용은 원래 그 책에 포함돼 있던 내용이다. 하지만 C# 6.0을 포함한 개정판이 나오면서 책의 분량이 늘어나는 것을 고려해 3부의 내용을 제외시켜 무료 PDF 문서로 공개했고 이번 C# 7.0/7.1 책에서도 포함하지 않았다. 종이책으로 꾸준히 출판한 1부, 2부와는 달리 3부의 내용은 C# 5.0 책이 쓰여졌던 시점 이후로 업데이트되지 않았기 때문에 3부의 내용 중 일부는 개발 환경의 변화로 달라졌을 수 있음을 미리 말씀드린다.


정리하면, 3부의 내용 중 모바일 부분은 거의 실습을 할 수 없을 것입니다. 그래도 다음의 사이트에 소스코드가 공개되어 있으니 참고하실 수 있습니다.

OfficePresenter 소스코드
; https://github.com/stjeong/OfficePresenter
(다운로드 방법: 위 링크의 우측 하단에 "Download ZIP" 버튼을 누르면 됩니다.)





[정오표]

* 1부 정오표 *
위치 변경 전 변경 후
4.1.4 소멸자 (110 페이지) 4.1.4 절 전체에 쓰인 소멸자
5.4.2.6 절 전체에 쓰인 소멸자
11.2 절 700 페이지
12.5 절 744, 745 페이지
"소멸자"라는 단어를 "종료자"로 변경, 아울러 영문 표기도 "destructor"에서 "finalizer"로 변경

(농상 님의 건의 사항입니다.)
4.2.1 접근 제한자 (127 페이지) internal protected : protected와 internal의 조합으로, 동일 어셈블리 내에서 정의된 파생 클래스까지만 접근을 허용한다(protected internal로도 지정 가능). internal protected : 동일 어셈블리 내에서 정의된 클래스이거나 다른 어셈블리라면 파생 클래스인 경우에 한해 접근을 허용한다(protected internal로도 지정 가능). 즉, internal 또는 protected 조건이다.
5.1.3.1 연산 범위 확인: checked, unchecked (277 페이지) (내용 없음) (277 페이지 두 번째 줄 다음에 박스 형식의 노트(Note)를 추가)

엄밀하게 정의를 하면, 정수에서의 상한 및 하한을 넘어서는 모든 결과를 오버플로라고 하며 언더플로는 특별히 부동 소수점 연산에서 0에 가깝지만 정밀도의 한계로 표현할 수 없을 때 아예 0으로 만들어 버리는 것을 의미한다.

(농상 님이 오류 보고해 주신 사항입니다.)
5.4.2.6 소멸자 (365 페이지) "기본적인 소멸자 정의는...."으로 시작해 366 페이지의 내용까지. 종료자(소멸자)에 대한 처리에 있어 기본적인 설명이 변경되었습니다. 자세한 사항은 "windbg로 확인하는 Finalizer를 가진 객체의 GC 과정" 글에 "이번 테스트를 통해 제가 그동안 잘못 알고 있던 것을 바로잡을 수 있게 되었습니다."라고 시작하는 절로 정리했으니 참고하세요.
06 BCL (369 페이지, 마지막에서 둘 째줄) 자주 사용되기 때문에 마이크소프트에서는 자주 사용되기 때문에 마이크로소프트에서는

6.1.3 System.Diagnostics.Stopwatch (375 페이지) (Stopwatch 예제 코드) Stopwatch st = new Stopwatch();

st.Start();
Sum();
st.Stop();

// st.ElapsedTicks 속성은 구간 사이에 흐른 타이머의 틱(tick) 수
Console.WriteLine("Total Ticks: " + st.ElapsedTicks);

// st.ElapsedMilliseconds 속성은 구간 사이에 흐른 시간을 밀리초로 반환
Console.WriteLine("Millisecond: " + st.ElapsedMilliseconds);

// 밀리초로 흐른 시간을 초로 환산
Console.WriteLine("Second: " + st.ElapsedMilliseconds / 1000);

// Stop.Frequency 속성이 초당 흐른 틱수를 반환하므로,
// ElapsedTicks에 대해 나눠주면 초 단위의 시간을 잴 수 있음.
Console.WriteLine("Second: " + st.ElapsedTicks / Stopwatch.Frequency);


(나나 님이 오류 보고해 주신 사항입니다.)
6.2.1 System.String (383 페이지) "표 6.3 형식 문자열 종류"의 날짜형에서 "유형" 컬럼에 "D", "D", "T", "T", "F", "F", "G", "G", "M", "Y" "표 6.3 형식 문자열 종류"의 날짜형에서 "유형" 컬럼에 "d", "D", "t", "T", "f", "F", "g", "G", "M", "Y"

(bluel004@hanmail.net 님이 오류 보고해 주신 사항입니다.)


* 2부 정오표 *
위치 변경 전 변경 후
10.2 비동기 호출 (677 페이지 예제 10.2) new FileStream(@"C:\windows\system32\drivers\etc\HOSTS", FileMode.Open, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
new FileStream(@"C:\windows\system32\drivers\etc\HOSTS", FileMode.Open, FileAccess.Read, FileShare.ReadWrite))

(https://www.sysnet.pe.kr/3/0/5119)
11.4 null 조건 연산자 (705 페이지 마지막 예제) string [] lines = GetLines();
string firstElement = lines?[0]; // lines != null이면 lines[0] 요소를 반환
(예제 개선)

{
    string[] lines = { "txt", "doc" };
    string firstElement = lines?[0]; // lines != null이므로 lines[0] 요소를 반환
}

{
    string[] lines = null;
    string firstElement = lines?[0]; // lines == null이므로 null 반환
}

(농상 님의 건의 사항입니다.)
12.1 더욱 편리해진 out 매개변수 사용 (730 페이지) {
    int.TryParse("5", out int _ ); // 변수명 대신 밑줄(underline: _)로 생략
    int.TryParse("5", out var _ );
}
다음과 같이 코드 추가합니다.


{
    int.TryParse("5", out int _ ); // 변수명 대신 밑줄(underline: _)로 생략
    int.TryParse("5", out var _ ); // 타입 대신 var
    int.TryParse("5", out _ ); // 타입까지도 생략 가능


}
12.3 튜플 (735 페이지) 튜플(Tuple)이란 유한 개의 원소로 이뤄진 졍렬된 튜플(Tuple)이란 유한 개의 원소로 이뤄진 정렬된

(bluel004@hanmail.net 님이 오류 보고해 주신 사항입니다.)
12.7 사용자 정의 Task 타입을 async 메서드의 반환 타입으로 사용가능 (748 페이지) "C# 7.0부터..."로 시작하는 내용을 부분적으로 교체 이 기능은 C# 5.0 컴파일러부터 이미 제공되던 기능으로 자세한 사항은 "C# - async를 Task 타입이 아닌 사용자 정의 타입에 적용하는 방법" 글에 정리했으니 참고하세요.
12.10.2 switch/case 문의 패턴 매칭 (757 페이지) case DateTime dt: // 타입 패턴 (값 형식) - 필요 없다면 dt 변수 생략 가능
    break;

case ArrayList arr: // 타입 패턴 (참조 형식) - 필요 없다면 arr 변수 생략 가능
    break;
case DateTime dt: // 타입 패턴 (값 형식) - 필요 없다면 dt 변수명을 밑줄(_)로 생략 가능
    break;

case ArrayList arr: // 타입 패턴 (참조 형식) - 필요 없다면 arr 변수명을 밑줄(_)로 생략 가능
    break;

(농상 님이 오류 보고해 주신 사항입니다.)



[연관 글]






[최초 등록일: ]
[최종 수정일: 1/5/2023]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 



2017-10-26 07시11분
[6.0구매자] PDF파일이 기존에 있던거와 달라졌네요. 기존에 있던 PDF파일 보다 페이지수가 적어졌네요. 부록까지 포함시켰는데도..
아직 다 안둘러봐서 모르겠습니다. 뭔가 빼신 내용이라도 있는건가요?
[guest]
2017-10-26 07시40분
내용은 거의 같습니다. 단지, 6.0의 PDF는 5.0의 내용을 PDF로 만든 것이고 7.0의 PDF는 7.0 책에 맞게 약간 내용이 수정되었기 때문에 제가 가지고 있던 워드 원본 파일로부터 PDF를 만들었다는 차이가 있습니다.
정성태
2018-01-09 01시14분
[[MFC 개발자]] WPF 를 알고 나서 C#에 대해 관심을 가지게 되었습니다. "시작하세요! C# 7.1 프로그래밍" 책을 구매했구요. 책내용이 알차구요, 홈페이지도 잘 운영하고 계시네요. 조만간 WPF 관련 책도 한 번 내시면 좋겠습니다. 국내에 변변한 책이 없네요.
[guest]
2018-01-09 01시25분
사실 WPF 책은 "찰스 페졸드의 WPF"만큼 잘쓸 자신이 없군요. ^^; (참고로, 해당 책이 절판이긴 한데, 이후에 나온 "찰스 페졸드의 Programming Windows (6판)" 책이 UWP 앱을 대상으로 쓰여지긴 했지만 거의 WPF에도 유사하게 적용됩니다.)
정성태
2018-03-11 08시11분
[ㄴㅇㄹ] 방금 구매했습니다 ㅎㅎ..
[guest]
2018-10-09 12시25분
[베타] 67p 첫번째줄 결괏값 → 결과값
[guest]
2018-10-09 12시44분
@베타 님 결괏값이 맞습니다. 다음의 글을 참고하세요.

https://www.korean.go.kr/front/onlineQna/onlineQnaView.do?mn_id=61&qna_seq=86740&pageIndex=1
정성태
2018-10-11 11시31분
본문과 상관없는 내용이 긴 덧글입니다. [보이기]
[guest]
2018-10-12 02시14분
본문과 상관없는 내용이 긴 덧글입니다. [보이기]
[guest]
2018-10-12 12시42분
본문과 상관없는 내용이 긴 덧글입니다. [보이기]
[guest]
2018-10-12 02시41분
책의 내용과 그다지 상관없는 긴 덧글들이 달리고 있는데요. 우선, 7.1 책의 원본은 6.0의 것을 그대로 따라 '결과값'으로 되어 있던 것을 출판사 측에서 그 당시 교정을 보면서 바뀐 문법이 적용되어 '결괏값'으로 된 것입니다. 제가 국어 쪽으로는 전문 분야가 아니다 보니 이 수준에서 마무리할 것이니 더 이상 이와 관련한 덧글이 달리지 않길 바랍니다.
정성태

... 91  92  93  [94]  95  96  97  98  99  100  101  102  103  104  105  ...
NoWriterDateCnt.TitleFile(s)
11456정성태2/17/201825457.NET Framework: 731. C# - await을 Task 타입이 아닌 사용자 정의 타입에 적용하는 방법 [7]파일 다운로드1
11455정성태2/17/201814805오류 유형: 451. ASP.NET Core - An error occurred during the compilation of a resource required to process this request.
11454정성태2/12/201823572기타: 71. 만료된 Office 제품 키를 변경하는 방법
11453정성태1/31/201815261오류 유형: 450. Azure Cloud Services(classic) 배포 시 "Certificate with thumbprint ... doesn't exist." 오류 발생
11452정성태1/31/201820932기타: 70. 재현 가능한 최소한의 예제 프로젝트란? [3]파일 다운로드1
11451정성태1/24/201815516디버깅 기술: 111. windbg - x86 메모리 덤프 분석 시 닷넷 메서드의 호출 인자 값 확인
11450정성태1/24/201830005Windows: 146. PowerShell로 원격 프로세스(EXE, BAT) 실행하는 방법 [1]
11449정성태1/23/201818301오류 유형: 449. 단위 테스트 - Could not load file or assembly 'Microsoft.VisualStudio.QualityTools.VideoRecorderEngine' or one of its dependencies. [1]
11448정성태1/20/201815192오류 유형: 448. Fakes를 포함한 단위 테스트 프로젝트를 빌드 시 CS0619 관련 오류 발생
11447정성태1/20/201816710.NET Framework: 730. dotnet user-secrets 명령어 [2]파일 다운로드1
11446정성태1/20/201817968.NET Framework: 729. windbg로 살펴보는 GC heap의 Segment 구조 [2]파일 다운로드1
11445정성태1/20/201815476.NET Framework: 728. windbg - 눈으로 확인하는 Workstation GC / Server GC
11444정성태1/19/201816252VS.NET IDE: 125. Visual Studio에서 Selenium WebDriver를 이용한 웹 브라우저 단위 테스트 구성파일 다운로드1
11443정성태1/18/201816019VC++: 124. libuv 모듈 살펴 보기
11442정성태1/18/201814501개발 환경 구성: 353. ASP.NET Core 프로젝트의 "Enable unmanaged code debugging" 옵션 켜는 방법
11441정성태1/18/201813470오류 유형: 447. ASP.NET Core 배포 오류 - Ensure that restore has run and that you have included '...' in the TargetFrameworks for your project.
11440정성태1/17/201816518.NET Framework: 727. ASP.NET의 HttpContext.Current 구현에 대응하는 ASP.NET Core의 IHttpContextAccessor/HttpContextAccessor 사용법파일 다운로드1
11439정성태1/17/201820580기타: 69. C# - CPU 100% 부하 주는 프로그램파일 다운로드1
11438정성태1/17/201815797오류 유형: 446. Error CS0234 The type or namespace name 'ITuple' does not exist in the namespace
11437정성태1/17/201814845VS.NET IDE: 124. Platform Toolset 설정에 따른 Visual C++의 헤더 파일 기본 디렉터리
11436정성태1/16/201816823개발 환경 구성: 352. ASP.NET Core (EXE) 프로세스가 IIS에서 호스팅되는 방법 - ASP.NET Core Module(AspNetCoreModule) [4]
11435정성태1/16/201817799개발 환경 구성: 351. OWIN 웹 서버(EXE)를 IIS에서 호스팅하는 방법 - HttpPlatformHandler (Reverse Proxy)파일 다운로드2
11434정성태1/15/201818177개발 환경 구성: 350. 사용자 정의 웹 서버(EXE)를 IIS에서 호스팅하는 방법 - HttpPlatformHandler (Reverse Proxy)파일 다운로드2
11433정성태1/15/201816326개발 환경 구성: 349. dotnet ef 명령어 사용을 위한 준비
11432정성태1/11/201821068.NET Framework: 726. WPF + Direct2D + SharpDX 출력 C# 예제파일 다운로드2
11431정성태1/11/201819723.NET Framework: 725. C# - 동기 방식이면서 비동기 메서드(awaitable)처럼 구현한 사례 [9]
... 91  92  93  [94]  95  96  97  98  99  100  101  102  103  104  105  ...