성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] VT sequences to "CONOUT$" vs. STD_O...
[정성태] NetCoreDbg is a managed code debugg...
[정성태] Evaluating tail call elimination in...
[정성태] What’s new in System.Text.Json in ....
[정성태] What's new in .NET 9: Cryptography ...
[정성태] 아... 제시해 주신 "https://akrzemi1.wordp...
[정성태] 다시 질문을 정리할 필요가 있을 것 같습니다. 제가 본문에...
[이승준] 완전히 잘못 짚었습니다. 댓글 지우고 싶네요. 검색을 해보...
[정성태] 우선 답글 감사합니다. ^^ 그런데, 사실 저 예제는 (g...
[이승준] 수정이 안되어서... byteArray는 BYTE* 타입입니다...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
닷넷
COM 개체 관련
스크립트
VC++
VS.NET IDE
Windows
Team Foundation Server
디버깅 기술
오류 유형
개발 환경 구성
웹
기타
Linux
Java
DDK
Math
Phone
Graphics
사물인터넷
부모글 보이기/감추기
내용
<div style='display: inline'> <h1 ext='true' style='font-family: Malgun Gothic, Consolas; font-size: 20pt; color: #006699; text-align: center; font-weight: bold'>도서: 시작하세요! C# 8.0 프로그래밍</h1> <p> 기존에 출판되었던,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > 시작하세요! C# 프로그래밍 기본 문법부터 실전 예제까지 ; <a target='tab' href='http://www.yes24.com/24/goods/11257753?scode=032'>http://www.yes24.com/24/goods/11257753</a> 시작하세요! C# 6.0 프로그래밍 기본 문법부터 실전 예제까지 ; <a target='tab' href='http://www.yes24.com/24/goods/19427525?scode=032'>http://www.yes24.com/24/goods/19427525</a> 시작하세요! C# 7.1 프로그래밍 기본 문법부터 실전 예제까지 ; <a target='tab' href='http://www.yes24.com/24/goods/48156128?scode=032'>http://www.yes24.com/24/goods/48156128</a> 시작하세요! C# 7.3 프로그래밍 기본 문법부터 실전 예제까지 ; <a target='tab' href='http://www.yes24.com/Product/Goods/73031673'>http://www.yes24.com/Product/Goods/73031673</a> </pre> <br /> "시작하세요! C# 프로그래밍"의 8.0 개정판이 나왔습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > 위키북스 - 시작하세요! C# 8.0 프로그래밍: 기본 문법부터 실전 예제까지 ; <a target='tab' href='http://wikibook.co.kr/beginning-csharp-8/'>http://wikibook.co.kr/beginning-csharp-8/</a> Yes24 - 시작하세요! C# 8.0 프로그래밍 기본 문법부터 실전 예제까지 ; <a target='tab' href='http://www.yes24.com/Product/Goods/73031673'>http://www.yes24.com/Product/Goods/73031673</a> </pre> <br /> 이번에도 책의 두께 문제로 초판에서 발행했던 3부의 내용은 PDF 파일로 공개됩니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > 공개된 3부 - PDF 파일 ; <a target='tab' href='https://www.sysnet.pe.kr/book/cs8_free.pdf'>https//www.sysnet.pe.kr/book/cs8_free.pdf</a> </pre> <br /> 책에서 혹시 이해가 안되거나 궁금하신 부분이 있는 경우 다음의 게시판을 활용해 질문을 주시면 답변을 드리도록 하겠습니다. (물론, 오타나 문장이 이상한 부분이 있는 것도 게시판을 통해 알려주시면 반영하겠습니다.)<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > 질문 답변 게시판 ; <a target='tab' href='http://www.sysnet.pe.kr/3/0'>http://www.sysnet.pe.kr/3/0</a> </pre> <br /> 책에 있는 예제는 아래의 경로에서 다운로드할 수 있고,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > .NET Framework 용 소스코드 다운로드(단일 ZIP 파일) ; <a target='tab' href='https://www.sysnet.pe.kr/book/cs8_sample_code.zip'>https://www.sysnet.pe.kr/book/cs8_sample_code.zip</a> * 소스코드를 비주얼 스튜디오 2019에서 열은 후, 테스트하고 싶은 프로젝트를 "시작 프로젝트로 설정" 메뉴로 지정하면 됩니다. ("시작 프로젝트로 설정" 메뉴에 대해서는 책의 295페이지에 있는 "Note" 내용에서 좀 더 자세하게 알 수 있습니다.) * 처음 CSharp8x.sln 솔루션을 로드 후 빌드하면 오류가 발생할 수 있습니다. 일부 프로젝트의 경우 NuGet 패키지 구성 시간이 걸려 그런 것이므로 1~2분 정도 후에 다시 빌드하면 됩니다. 6장에서 만드는 SQL 데이터베이스 파일 ; <a target='tab' href='https://www.sysnet.pe.kr/book/cs8_book_db_file.zip'>https://www.sysnet.pe.kr/book/cs8_book_db_file.zip</a> </pre> <br /> 참고로, .NET Core 프로젝트로 변환된 예제 코드도 제공합니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > .NET Core 용 소스코드 다운로드(단일 ZIP 파일) ; <a target='tab' href='https://www.sysnet.pe.kr/book/cs8_netcore_code.zip'>https://www.sysnet.pe.kr/book/cs8_netcore_code.zip</a> * .NET Framework의 BCL을 사용하는 일부 예제 코드는 .NET Core 프로젝트로 마이그레이션되지 않았습니다. * .NET Core 3.0으로 맞춰져 있으므로 빌드하기 위해서는 <a target='tab' href='https://dotnet.microsoft.com/download/dotnet-core/3.0'>.NET 3.0 SDK가 설치</a>되어 있어야 합니다. </pre> <br /> 압축을 풀면 나오는 "CSharp8x.sln" / "CSharp8xCore.sln" 파일을 비주얼 스튜디오 2019에서 열면 다음과 같이 솔루션 탐색기(Solution Explorer)에서 장(Chapter) 별로 나누어져 있어 찾기 편하도록 구성했습니다.<br /> <br /> <img alt='sample_code8_sln.png' src='/SysWebRes/bbs/sample_code8_sln.png' /><br /> <br /> 소스 코드 프로젝트 중에서 11장까지는 책에서 "예제" 제목이 달린 소스 코드마다 완전히 실행 가능한 C# 프로젝트를 만들었습니다. 또한, "예제" 제목이 달리지 않은 소스코드도 모두 "부가코드-[번호].txt"라는 파일에 담아 두었습니다. 각각의 txt 파일도 복사해서 붙여넣으면 컴파일이 되는 하나의 독립적인 예제입니다. 반면 12장 ~ 16장은 "예제" 제목이 달린 프로젝트가 해당 절에 포함된 소스 코드와 일치합니다.<br /> <br /> 이번에도 책에 포함된 모든 그림 파일을 다음의 경로에 공개해 두었습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > 책에 포함된 그림 ; <a target='tab' href='https://www.sysnet.pe.kr/book/cs8_img.zip'>https://www.sysnet.pe.kr/book/cs8_img.zip</a> </pre> <br /> 캡쳐된 그림 이외에 다이어그램을 그리기 위해 사용한 PPT 파일도 아래에 공개했습니다. (일부 다이어그램은 출판사 측에서 인쇄를 위해 재편집을 했기 때문에 원본과 다를 수 있습니다.)<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > 다이어그램 원본 PPT 파일 ; <a target='tab' href='https://www.sysnet.pe.kr/book/cs8_diagram.pptx'>https://www.sysnet.pe.kr/book/cs8_diagram.pptx</a> (혹시 이 파일에 실린 다이어그램을 좀 더 멋지게 그리셨다면 제 책에 실을 수 있도록 공유 부탁드립니다. ^^) </pre> <br /> 마지막으로, 공개된 PDF의 3부 내용에 대해서는 책의 서문에 쓴 내용을 공지합니다.<br /> <br /> <div style='BACKGROUND-COLOR: #ccffcc; padding: 10px 10px 5px 10px; MARGIN: 0px 10px 10px 10px; FONT-FAMILY: Malgun Gothic, Consolas, Verdana; COLOR: #005555'> 이 중에서 3부의 내용은 좀 더 부가 설명이 필요하다. 필자가 쓴 책은 C# 5.0을 대상으로 처음 쓰여졌으며 3부의 내용은 원래 그 책에 포함돼 있던 내용이다. 하지만 C# 6.0을 포함한 개정판이 나오면서 책의 분량이 늘어나는 것을 고려해 3부의 내용을 제외시켜 무료 PDF 문서로 공개했고 이번 C# 8.0 책에서도 포함하지 않았다. <span style='color: blue; font-weight: bold'>종이책으로 꾸준히 출판한 1부, 2부와는 달리 3부의 내용은 C# 5.0 책이 쓰여졌던 시점 이후로 업데이트되지 않았기 때문에 3부의 내용 중 일부는 개발 환경의 변화로 달라졌을 수 있음을 미리 말씀드린다.</span> </div><br /> <br /> 정리하면, 3부의 내용 중 모바일 부분은 거의 실습을 할 수 없을 것입니다. 그래도 다음의 사이트에 소스코드가 공개되어 있으니 참고하실 수 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > OfficePresenter 소스코드 ; <a target='tab' href='https://github.com/stjeong/OfficePresenter'>https://github.com/stjeong/OfficePresenter</a> (다운로드 방법: 위 링크의 우측 하단에 "Download ZIP" 버튼을 누르면 됩니다.) </pre> <br /> <hr style='width: 50%' /><br /> <br /> <br /><div style='font-size: 12pt; font-family: Malgun Gothic, Consolas; color: #2211AA; text-align: left; font-weight: bold'>[정오표]</div> <br /> * 1부 정오표 *<br /> <table class="commentlist" style='width: 100%' border="2" > <tr> <th width='200px'>위치</th> <th>변경 전</th> <th>변경 후</th> </tr> <tr> <td width='200px'>4.1.5.2 정적 메서드 (118 페이지 하단 예제)</td> <td>static int CountOfInstance; // private 정적 필드</td> <td>static <span style='color: blue; font-weight: bold'>private</span> int CountOfInstance; // private 정적 필드<br /> <br /> <br /> (참고: <a target='tab' href='https://www.sysnet.pe.kr/3/0/5321'>https://www.sysnet.pe.kr/3/0/5321</a>) </td> </tr> <tr> <td width='200px'>6.6.6 비동기 호출(465 페이지 하단 예제 마지막 줄)</td> <td>FileShare.ReadWrite);</td> <td>FileShare.ReadWrite, <span style='color: blue; font-weight: bold'>4096, true</span>); // 마지막 인자 true == 비동기 모드로 파일 열기<br /> <br /> <br /> (참고: <a target='tab' href='https://www.sysnet.pe.kr/2/0/12250'>https://www.sysnet.pe.kr/2/0/12250</a>) </td> </tr> <tr> <td width='200px'><a name='6_7_1'></a>6.7.1 System.Net.IPAddress(475 페이지)</td> <td>위의 주소 형식은 IPv4 주소에 해당하고, 128바이트로 확장된 IPv6의 주소 체계...</td> <td>위의 주소 형식은 IPv4 주소에 해당하고, <span style='color: blue; font-weight: bold'>16바이트(128비트)</span>로 확장된 IPv6의 주소 체계...<br /> <br /> <br /> (참고: <a target='tab' href='https://www.sysnet.pe.kr/3/0/5368'>https://www.sysnet.pe.kr/3/0/5368</a>) </td> </tr> </table> <br /> <br /> * 2부 정오표 *<br /> <table class="commentlist" style='width: 100%' border="2" > <tr> <th width='200px'>위치</th> <th>변경 전</th> <th>변경 후</th> </tr> <tr> <td width='200px'><a name='10_2_5'></a>10.2.5 비동기 호출의 병렬 처리(701 페이지)</td> <td>반면 예제 10.8의 Task.WhellAll과 await의 조합으로</td> <td>반면 예제 10.8의 Task.<span style='color: blue; font-weight: bold'>WhenAll</span>과 await의 조합으로<br /> <br /> <br /> (참고: <a target='tab' href='https://www.sysnet.pe.kr/3/0/5374'>https://www.sysnet.pe.kr/3/0/5374</a>) </td> </tr> <tr> <td width='200px'>12.6 지역 함수(755 페이지)</td> <td colspan='2'>마이크로소프트의 문서에 따라 명칭을 "지역 함수"에서 "<a target='tab' href='https://docs.microsoft.com/ko-kr/dotnet/csharp/whats-new/csharp-7#local-functions'>로컬 함수</a>"로 변경 </td> </tr> <tr> <td width='200px'>16.8 정적 지역 함수(849 페이지)</td> <td colspan='2'>마이크로소프트의 문서에 따라 명칭을 "정적 지역 함수"에서 "<a target='tab' href='https://docs.microsoft.com/ko-kr/dotnet/csharp/whats-new/csharp-8#static-local-functions'>정적 로컬 함수</a>"로 변경 </td> </tr> <tr> <td width='200px'>14.5 신규 추가 타입: Span<T> (795페이지)</td> <td>bytes[10] = 100;</td> <td><a name='14_5'></a>bytes<span style='color: blue; font-weight: bold'>[9]</span> = 100;<br /> <br/> (코드 수정과 함께 다음의 Note를 별도 박스로 추가)<br /><br /> 예제에서 "bytes[9] = 100;" 코드를 "bytes[10] = 100;"으로 바꿔서 실행해 보자. 일반적으로 비관리 메모리를 잘못 접근하게 되면 Access Violation 오류가 발생해 프로그램은 비정상 종료하게 되므로 try 이후 catch/finally 절은 실행되지 않는다. 하지만, Span<T>로 감싼 경우라면 그 대상이 비관리 메모리일지라도 내부적인 관리 포인터의 혜택으로 예외 처리가 가능해 catch/finally 절의 코드가 정상적으로 실행된다는 것도 Span을 사용하면서 얻게 되는 장점 중의 하나다.<br /><br /> (참고: <a target='tab' href='https://www.sysnet.pe.kr/3/0/5379'>https://www.sysnet.pe.kr/3/0/5379</a>) </td> </tr> <tr> <td width='200px'>16.1.2 null일 수 있다면 해당 인스턴스를 null 가능한 타입이라고 명시(832 페이지)</td> <td>(하단의 "DoesNotReturn(Method)"에 대한 설명과 예제 코드 전체)</td> <td><a name='16_1_2_1'></a><br /> [설명] 특성이 적용된 메서드는 실행을 반환하지 않는다고 컴파일러에게 힌트를 부여<br /> <br /> [예제 코드]<br /> public class DoesNotReturnTest<br /> {<br /> <i>// 원래 경고가 발생하지만,<br /> // DoesNotReturn 특성으로 인해 경고가 제거됨</i><br /> public DoesNotReturnTest()<br /> {<br /> string text = Environment.GetEnvironmentVariable("TEST");<br /> if (text == null)<br /> {<br /> LogAndThrowNullArg($"{nameof(text)}");<br /> }<br /> <br /> Console.WriteLine(<b>text.Length</b>);<br /> }<br /> <br /> <b>[DoesNotReturn]</b><br /> private void LogAndThrowNullArg(string name)<br /> {<br /> throw new ArgumentNullException(name); <br /> }<br /> <br /> <i>// DoesNotReturn 메서드는 정상적인 반환을 허용하지 않으므로<br /> // 아래의 코드는 경고를 발생</i><br /> <b>[DoesNotReturn]</b><br /> public void EnsureNotNull(string? text)<br /> {<br /> if (text == null)<br /> {<br /> throw new ApplicationException("NULL-REF");<br /> }<br /> } // Warning CS8763<br /> }<br /> <br /> (참고: <a target='tab' href='https://www.sysnet.pe.kr/3/0/5388'>https://www.sysnet.pe.kr/3/0/5388</a>) </td> </tr> <tr> <td width='200px'><a name='16_1_2_2'></a>16.1.2 null일 수 있다면 해당 인스턴스를 null 가능한 타입이라고 명시(833 페이지)</td> <td>(하단의 "DoesNotReturnIf(Parameter)"에 대한 설명)</td> <td><br /> [설명] 특성이 적용된 인자의 bool 조건에 따라 해당 메서드는 실행을 반환하지 않는다고 컴파일러에게 힌트를 부여<br /> <br /> (참고: <a target='tab' href='https://www.sysnet.pe.kr/3/0/5388'>https://www.sysnet.pe.kr/3/0/5388</a>) </td> </tr> </table> <br /> <br /><div style='font-size: 12pt; font-family: Malgun Gothic, Consolas; color: #2211AA; text-align: left; font-weight: bold'>[사소한 단어 수정]</div> <br /> <table class="commentlist" style='width: 100%' border="2" > <tr> <th width='200px'>위치</th> <th>변경 전</th> <th>변경 후</th> </tr> <tr> <td width='200px'>6.8.2.4 System.Data.SqlClient.SqlParameter (538 페이지 예제)</td> <td colspan='2'>본문의 모든 new SqlParameter("...", ...);에서 첫 번째 인자의 이름에 "@" 글자 추가<br /><br /> 예) new SqlParameter(<span style='color: blue; font-weight: bold'>"@Name"</span>, SqlDbType.NVarChar, 20);<br /> <br /> (참고: <a target='tab' href='https://www.sysnet.pe.kr/3/0/5404'>https://www.sysnet.pe.kr/3/0/5404</a>) </tr> <tr> <td width='200px'>6.8.3.1 일반 닷넷 클래스 (541 페이지 예제)</td> <td colspan='2'>본문의 모든 new SqlParameter("...", ...);에서 첫 번째 인자의 이름에 "@" 글자 추가<br /><br /> 예) new SqlParameter(<span style='color: blue; font-weight: bold'>"@Name"</span>, SqlDbType.NVarChar, 20);<br /> <br /> (참고: <a target='tab' href='https://www.sysnet.pe.kr/3/0/5404'>https://www.sysnet.pe.kr/3/0/5404</a>) </tr> <tr> <td width='200px'>6.8.3.2 System.Data.DataSet (548 페이지 예제)</td> <td colspan='2'>본문의 모든 new SqlParameter("...", ...);에서 첫 번째 인자의 이름에 "@" 글자 추가<br /><br /> 예) new SqlParameter(<span style='color: blue; font-weight: bold'>"@Name"</span>, SqlDbType.NVarChar, 20);<br /> <br /> (참고: <a target='tab' href='https://www.sysnet.pe.kr/3/0/5404'>https://www.sysnet.pe.kr/3/0/5404</a>) </tr> <tr> <td width='200px'>16.1.3 널 가능(Nullable) 문맥 제어(836 페이지, 하단에서 세 번째 줄)</td> <td>이러한 문맥 제어는</td> <td>각각의 문맥 제어는</td> </tr> </table> </p><br /> </div>
첨부파일
스팸 방지용 인증 번호
5735
(왼쪽의 숫자를 입력해야 합니다.)