메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

모어 이펙티브 C#(2판)

더 강력한 C# 코드를 구현하는 50가지 추가 전략과 기법

한빛미디어

번역서

판매중

  • 저자 : 빌 와그너
  • 번역 : 김완섭
  • 출간 : 2019-05-06
  • 페이지 : 300 쪽
  • ISBN : 9791162240892
  • 물류코드 :10089
  • 초급 초중급 중급 중고급 고급
4.2점 (12명)
좋아요 : 3

더 나은 코드를 작성하는 새로운 지침 50가지(C# 7.0 대응) 

 

C#은 전통적인 .NET 기반 개발에서 유니티 게임 엔진으로 개발 영역을 확대하면서 더욱 주목받고 있다. 또한 자마린으로 다양한 모바일 플랫폼에 대응할 수 있어 수요가 계속 늘고 있다. 이 책은 소프트웨어 개발자가 C#을 더 효율적으로 사용할 수 있는 다양한 팁과 실용적인 방법을 제공한다. 특히 전작인 『이펙티브 C#』에서 미처 다루지 못했던 50개 추가 개발 지침을 선정해 자세히 다룬다.

 

저자는 자신의 노하우와 함께 개발 커뮤니티에서 제안한 개발 지침까지 고려해 매일 발생할 수 있는 문제를 해결할 강력한 새 솔루션을 제공한다. 전문가의 팁과 실용 예제 코드를 명확하게 설명한 이 책을 읽고 나면, 이미 익숙한 작업도 더 효율적이고 효과적으로 수행할 수 있게 될 것이다.

 

주요 내용

  • 1장_ 데이터 타입
  • 2장_ API 설계
  • 3장_ 태스크 기반 비동기 프로그래밍
  • 4장_ 병렬 처리
  • 5장_ 동적 프로그래밍
  • 6장_ 글로벌 C# 커뮤니티에 참여하기

 

추천사

 

이 책의 초판 시리즈가 출간된 지 10여 년, 그간 눈부시게 발전한 C# 언어와 프레임워크의 새로운 면모와 더불어 C# 커뮤니티에 쌓인 지식을 담은 개정판을 만날 수 있다는 것은 C# 개발자들에게 큰 행운이다. 최근 한국어 개정판이 출간된 『이펙티브 C#』과 함께 『모어 이펙티브 C#』을 C# 개발자라면 반드시 읽어볼 것을 권한다.

김명신_『이펙티브 C#, 3판』 역자

 

기술 서적의 번역은 일은 결코 쉬운 일이 아니다. 물론 일반 번역가도 기술 서적을 번역할 수 있지만, 경험에 근거하지 않거나 배경지식이 없으면 독자가 납득할 만한 수준의 번역이 나오기 어렵다. 역자는 10년 이상 현업에 종사하면서 다양한 IT  프로젝트와 기술을 경험한 베테랑이다. 그뿐만 아니라 30권이 넘는 기술 서적을 번역한 몇 안 되는 기술 서적 전문 번역가이기도 하다.

이 책은 C#을 어느 정도 알고 있는 독자로 하여금 더 깊이 있게 이해하도록 도울 뿐만 아니라, 개념적으로도 자바나 다른 언어와 연계되는 심도 있는 부분까지 다루고 있어서 다른 언어 개발자에게도 도움이 될 것이다.

조대명_헬로마켓 CTO

빌 와그너 저자

빌 와그너

일리노이 대학에서 컴퓨터 과학을 전공했고 현재 마이크로소프트의 .NET Core 콘텐츠팀에서 C#과 .NET 관련 교육 자료를 작성하는 업무를 담당한다. 세계 최고의 C# 전문가 중 한 명이며 ECMA C# 표준 위원회의 멤버이기도 하다. 휴매니테리언 툴박스(Humanitarian Toolbox) 대표이자 마이크로소프트 지역 디렉터인 동시에 11년간 .NET 분야 MVP이기도 하다. 최근에는 .NET Foundation 자문 위원으로 위촉되었다. 스타트업부터 대기업에 이르기까지 다양한 기업의 개발 프로세스를 개선하고 개발팀을 성장시키는 일을 돕는다. 앞서 『이펙티브 C#』을 출간한 바 있다.
김완섭 역자

김완섭

네덜란드 ITC에서 Geoinformation for Disaster Risk Management 석사 학위를 취득하고 약 9년간 일본과 한국의 기업에서 IT 및 GIS/LBS 분야 업무를 수행했다. 일본에서는 세콤 계열사인 파스코에서 일본 외무부, 국토지리정보원 같은 정부 기관을 대상으로 한 시스템 통합(SI) 업무를 담당했다. 이후 야후 재팬에서 야후 맵 개발 담당 시니어 엔지니어로 근무하다 한국으로 돌아와 SK에서 내비게이션 지도 데이터 담당 매니저로 일했다. 지금은 싱가포르에 있는 일본계 회사에서 은행 관련 IT 프로젝트를 담당하고 있으며 저자 및 역자로도 왕성히 활동 중이다. 저서로는 『나는 도쿄 롯폰기로 출근한다』가 있으며, 역서로는 『알고리즘 도감』, 『처음 만나는 HTML5 & CSS3』, 『인공지능 70』, 『처음 만나는 자바스크립트』, 『다양한 언어로 배우는 정규표현식』, 『그림으로 공부하는 IT 인프라 구조』, 『그림으로 공부하는 시스템 성능 구조』 등 40여종이 있다. 또한 블로그를 통해 IT 번역 관련 이야기와 싱가포르 직장 생활을 소개하고 있다.

 

CHAPTER 1_ 데이터 타입

아이템 1_ 접근 가능한 데이터 멤버 대신 속성을 사용하라 

아이템 2_ 변경 가능한 데이터에는 암묵적 속성을 사용하는 것이 낫다 

아이템 3_ 값 타입은 변경 불가능한 것이 낫다 

아이템 4_ 값 타입과 참조 타입을 구분하라 

아이템 5_ 값 타입에서는 0이 유효한 상태가 되도록 설계하라 

아이템 6_ 속성을 데이터처럼 동작하게 만들라 

아이템 7_ 튜플을 사용해서 타입의 사용 범위를 제한하라 

아이템 8_ 익명 타입은 함수를 벗어나지 않게 사용하라 

아이템 9_ 다양한 동일성 개념들 사이의 상관관계를 이해하라 

아이템 10_ GetHashCode()의 위험성을 이해하라 

 

CHAPTER 2_ API 설계

아이템 11_ API에는 변환 연산자를 작성하지 말라 

아이템 12_ 선택적 매개변수를 사용하여 메서드 오버로드를 최소화하라 

아이템 13_ 타입의 가시성을 제한하라 

아이템 14_ 상속보다는 인터페이스를 정의하고 구현하는 것이 낫다 

아이템 15_ 인터페이스 메서드와 가상 메서드의 차이를 이해하라 

아이템 16_ 상태 전달을 위한 이벤트 패턴을 구현하라 

아이템 17_ 내부 객체를 참조로 반환해서는 안 된다 

아이템 18_ 이벤트 핸들러보다는 오버라이딩을 사용하라 

아이템 19_ 베이스 클래스에 정의된 메서드를 오버로드해서는 안 된다 

아이템 20_ 이벤트가 런타임 시 객체 간의 결합도를 증가시킨다는 것을 이해하라 

아이템 21_ 이벤트는 가상으로 선언하지 말라 

아이템 22_ 명확하고 간결하며 완결된 메서드 그룹을 생성하라 

아이템 23_ 생성자, 변경자, 이벤트 핸들러를 위해 partial 클래스와 메서드를 제공하라 

아이템 24_ 설계 선택지를 제한하는 ICloneable은 사용을 피하라 

아이템 25_ 배열 매개변수에는 params 배열만 사용해야 한다 

아이템 26_ 지역 함수를 사용해서 반복자와 비동기 메서드의 오류를 즉시 보고하라 

 

CHAPTER 3 태스크 기반 비동기 프로그래밍

아이템 27_ 비동기 작업에는 비동기 메서드를 사용하라 

아이템 28_ async void 메서드는 절대 작성하지 말라 

아이템 29_ 동기, 비동기 메서드를 함께 사용해서는 안 된다 

아이템 30_ 비동기 메서드를 사용해서 스레드 생성과 콘텍스트 전환을 피하라 

아이템 31_ 불필요한 콘텍스트 마셜링을 피하라 

아이템 32_ 비동기 작업은 태스크 객체를 사용해 구성하라 

아이템 33_ 태스크 취소 프로토콜 구현을 고려하라 

아이템 34_ 비동기 메서드의 반환값을 캐시하는 경우 ValueTask<T>를 사용하라 

 

CHAPTER 4 병렬 처리

아이템 35_ PLINQ가 병렬 알고리즘을 구현하는 방법을 이해하라 

아이템 36_ 예외를 염두에 두고 병렬 알고리즘을 만들라 

아이템 37_ 스레드를 생성하지 말고 스레드 풀을 사용하라 

아이템 38_ 스레드 간 커뮤니케이션에는 BackgroundWorker를 사용하라 

아이템 39_ XAML 환경에서 스레드 간 호출을 이해하라 

아이템 40_ 동기화에는 lock()을 최우선으로 사용하라 

아이템 41_ 락은 가능한 한 좁은 범위에 적용하라 

아이템 42_ 잠긴 영역에서는 외부 코드 호출을 삼가라 

 

CHAPTER 5 동적 프로그래밍

아이템 43_ 동적 타이핑의 장단점을 이해하라 

아이템 44_ 제네릭 타입 매개변수의 런타임 타입을 활용하려면 동적 타이핑을 사용하라 

아이템 45_ 데이터 주도 동적 타입에는 DynamicObject나 IDynamicMetaObjectProvider를 사용하라 

아이템 46_ 표현식 API의 사용법을 익혀두라 

아이템 47_ Public API에서는 동적 객체 사용을 최소화하라 

 

CHAPTER 6 글로벌 C# 커뮤니티에 참여하기

아이템 48_ 가장 인기 있는 답이 아닌 최고의 답을 찾으라 

아이템 49_ 명세와 코드 향상에 기여하라 

아이템 50_ 분석기를 사용해서 자동화 처리를 고민하라 

 

기본적으로 C#에 대한 기초가 없는 상태로 이 책을 읽기 시작했지만, 코드를 이해하는 데는 큰 어려움이 있지 않았다. 본인 기준으로는 자바와 비슷하다고 느껴졌다.

 

이런 구체적인 테크닉들을 C#을 메인을 하고 있지 않아서 평가하긴 어려우나 코드에 대한 깊이나 접근 방식은 다른 언어에도 적용이 될 수 있는 부분이라 도움이 많이 되었다.

 

매우 구체적인 50가지 시나리오와 기법들이 소개되어있으나 가장 인상 깊게 보았던 챕터는 모든 언어에 적용될 수 있는 글로벌 C# 커뮤니티에 참여하기였으며, 그중 아이템 48의 가장 인기 있는 답이 아닌 최상의 답을 찾으라였다.

 

다시 한번 개발자에겐 커뮤니케이션의 중요함과 동시에 비판적 사고가 항상 요구된다는 것을 일하면서 자꾸 망각하게 된다. 나의 안일함과 단순히 편히 처리하려는 욕심이 더 컸던 과거에 대해서 다시 한번 반성하게 되었다.

그리고 커뮤니티에 적극적으로 참여하고 최상의 답에 vote를 하면서 더 건강하고 성숙한 커뮤니티를 만들어나갈 수 있도록 주도적으로 활동해야겠다 다짐하는 계기가 되었다.

 

 



 

 

KakaoTalk_20200819_145852258.jpg

 

이번 책에서도 중급 C# 프로그래머를 대상 독자로 한다고 머릿말에 적혀있습니다.

아 참고로 유니티 C# 스크립트랑은 크게 관련이 없습니다. 물론 알아둔다고 해서 손해볼건 없습니다.

중급, 그러니깐 C# 숙련자들을 위한 코드 지침서입니다. 사실 코드라는게 혼자서 가지고 놀기 위함이라면 별 상관은 없습니다.

다만 규모가 큰 프로젝트를 한다던가 다른 사람들과 협업을 위해서라면 반드시 규칙이 필요합니다.

 

실무에서 별 생각없이 사용해왔던 부분들을 근거와 이유를 제대로 설명하면서 어떻게 코드를 짜야하는지 설명해주고 있습니다.

따라서 실무 경험이 부족한 사람들이라면 경험을 좀 더 쌓으신 후에 읽어보시는 것을 권합니다.

초보자인 제가 보더라도 근거와 이유들을 납득이 되지만 그렇게 코드를 작성할 일이 많은지는 의구심이 들긴 합니다.

컴퓨터 공학 지식이 좀 더 쌓인 후에 보면 제대로 된 이해가 가능할 것 같습니다.

C#을 유니티하면서 배우는 김에 

좀 더 효율적으로 짤 수 있지 않을까해서 한 번 봤다.

 

 

 

 

 

 

 

 

 

 

 

#책소개

 

더 나은 코드를 작성하는 새로운 지침 50가지(C# 7.0 대응)

C#은 전통적인 .NET 기반 개발에서 유니티 게임 엔진으로 개발 영역을 확대하면서 더욱 주목받고 있다. 또한 자마린으로 다양한 모바일 플랫폼에 대응할 수 있어 수요가 계속 늘고 있다. 이 책은 소프트웨어 개발자가 C#을 더 효율적으로 사용할 수 있는 다양한 팁과 실용적인 방법을 제공한다. 특히 전작인 『이펙티브 C#』에서 미처 다루지 못했던 50개 추가 개발 지침을 선정해 자세히 다룬다.

저자는 자신의 노하우와 함께 개발 커뮤니티에서 제안한 개발 지침까지 고려해 매일 발생할 수 있는 문제를 해결할 강력한 새 솔루션을 제공한다. 전문가의 팁과 실용 예제 코드를 명확하게 설명한 이 책을 읽고 나면, 이미 익숙한 작업도 더 효율적이고 효과적으로 수행할 수 있게 될 것이다.

 

 

읽고 나니까.. 유니티랑은 관련이 거의 없더라.. ㅎㅎ

간접적으로나마 도움은 된다.

 

 

 

 

 

 


 

 

 

 

 

# 이 책의 특징

 

 

1. 상세한 설명이 특징이다.

 

역시 처음 본 사람들을 위해서인지 상세한 설명이 나와있다. 그래서 조금 알고 있는 사람들에게 지루함을 줄 수 있지만

그래서 자신이 무심코 놓쳤던 부분도 발견할 수 있었다.

 

 

 

2. 초보자보다 숙련자가 알아듣기 쉬움

 

사실 혼자서 배우는 것, 힘들다. 이 책은 초보를 위한 책이 아닌 숙련자를 위한 책이다. 못하는 사람을 잘하게 하는 책이 아닌 잘하는 사람을 더 잘하게 만들어 주는 책이다. 그 때문에 읽기 전에 알고 읽어야 한다.

 

 

 

3. 외국 도서의 장점인 영어 병기

 

한국도서는 말도 안되게 해석해놓은 것도 있는데 역시 외서라 구글링하기 쉽게 영어랑 병기되어있어서 좋다.

 

 

 

4. 진짜 C#을 오래 쓴 전문가가 집필한 도서

정말 경험담을 썼기에 믿고 읽는 도서이다.  그래서 믿을만 하고 따라갈만 하다.누가 왜 이렇게 했어!! 라고 하면 책에서 하라던데요. 하면 모든게 쉴드가 될듯한 느낌 

 

 

 

 

 

 


 

 

 

 

#후기

 

 

++마이크로소프트가 자바를 대신한다는 C#..??

 

마이크로소프트에서 야심차게 준비했지만 아직까진 자바를 이기진 못한 언어..하지만 내가 유니티를 쓰면서 쓴 C#은 정말 좋은 언어였다. 편리한 언어고 직관적이고 사용하기 편했다.라이브러리도 많은 것 같고, 약간 자바랑 다르면서 더 빠른 느낌??? 잘 모르겠다.

 

그래도 이 책에선 유니티보다는 그냥 C#에 대해서 더 자세히 설명했다. 내가 C#을 어디서 더 쓸지는 모르겠지만 참고할 만하다. 



출처: https://luv-n-interest.tistory.com/539 [노는 게 제일 좋아]

굉장히 다양한 프로그래밍 언어가 있고, 취향과 용도 따라 골라서 사용하고 있다. 각 언어들에서 사용하는 기본적인 문법이 큰 틀에서는 대동소이 하다보니 편하게 다른 언어로 넘어가서 사용 하실겁니다. 이러다 보니 처음 배운 언어 스타일이 다른 언어에서도 그대로 사용되는 경향이 있습니다. 그래서 다양한 서적들이 각 언어에 맞게 사용하는 방법을 소개하는 책들이 있습니다. 이 책도 그런 책들 중 하나입니다. `C#`을 `C#`처럼 사용하는 실무에서 어떻게 써야하는지를 구체적으로 다루고 있는 책입니다.

각 언어는 그 언어가 만들어진 철학을 이해하고 맞춰 사용하는 것이 가장 효율적으로 사용할 수 있는 방법이라고 생각합니다. 그 맥락에서 이 책은 `C#`을 현업에서 사용하시는 분들이 `C#`을 좀 더 제대로 설계하고 성능을 올리 수 있는 방법을 소개 합니다.

대신 중급 이상 사용자를 대상으로 하다보니 `.NET`에 대한 이해가 없는 경우에는 책을 전혀 이해하지 못할 수도 있습니다. 책 제목처럼 `C#`을 효율적으로 사용하는 방법이기에 그렇습니다. `C#`만 일정 수준 다룰 줄 안다고 해서 이책이 볼만해지는 건 또 아니라고 생각이 듭니다. 컴퓨터 시스템에 대한 이해와 알고리즘 등 다양한 기반 지식을 필요로 하는 내용이 있습니다. ~~서평 때문에 읽는데 다 이해 못했..~~  비동기, 병렬 파트를 꽤 많은 지면을 할애해서 다루고 있기 때문에 한단계 스킬 업 하기엔 정말 좋은 책이라고 생각이 듭니다.

이 책을 모두 이해 할 수 있다면 이미 어느 정도 수준에 올라 오신 분이란 생각하셔도 될 듯한 책이었습니다.

제출 링크: 

https://fishpoint.tistory.com/3557

 

어서와, C#은 처음이지?

 

진짜 C#에 대한 제대로 된 코드 구현 원리 More Effective C#. 빌 와그너 지음

 

10년 전 Visual Studio를 통해 처음으로 C#을 알게 되었다. MFC와 Visual C++로 이어지는 사용자 응용 프로그램은 C#으로 많이 대체가 되었다. 현재 C#의 시장 점유율은 높은 편이고, 언어의 완성도도 현존하는 언어 중 가장 괜찮다는 평이 많다. Java의 경우 여러가지로 제약이 많아 아쉬운 점을 C#이 덜어주고 있다는 의견도 많다. 코드기어(구 볼랜드)에서 Delphi와 C++Builder를 개발하여 유명해진 Anders Hejlsberg를 영입해 만들었는지라 컴포넌트 개발 환경이 우수하다. 엄청난 생산성을 자랑하던 델파이와 개발환경이 거의 유사하기 때문에 델파이의 개발자들은 거의 C# 개발자로 넘어갔다. 비주얼 스튜디오 6의 비주얼 베이직과 델파이/C++ Builder/C#을 비교해 보면 서로 간에 안드로메다 급으로 차이가 난다. 뿐만 아니라 GUI를 만들 때도 C#(윈폼)이 월등히 편리하다.[23] 윈도우즈 개발자들이 UI 작업 이야기 할 때 뭔가 이슈가 있다면 C# 개발자들은 그걸 아주 쉽게 생각한다(구현도 마찬가지). C#의 UI 컴포넌트는 근본 설계부터 컴포넌트 구조를 위해 설계되었기 때문이다.

 

뛰어난 C# 7.0 코드를 작성하기위한 50 가지의 중급 및 고급 기술을 제공한다. 저자인 Wagner는 C# 언어와 개발 커뮤니티의 정교함을 반영하여 매일 발생할 수있는 문제에 대한 강력한 검증과 방법을 알려준다. Wagner는 탁월한 C# 경험과 글로벌 C# 표준위원회의 핵심 역할을 바탕으로 C#으로 데이터 관리에 대한 객체 지향, 기능 및 서비스 지향 접근법을 다룬다. 사용자와 다른 프로그래머들에게 당신의 의도를 표현하는 더 좋은 방법인 강력한 비동기 및 동적 프로그래밍 기술을 활용할 수있는 비법을 알려준다. 

 

간략하게 대표적인 내용을 살펴보면 아래와 같다.

 

- 액세스 가능한 데이터 멤버 대신 속성 사용 (항목 1)

- 가치 유형과 참조 유형 구분 (항목 4)

- 여러 평등 개념 간의 관계 이해 (항목 9)

- API에서 변환 연산자 사용하지 않기 (항목 11)

- 인터페이스 및 가상 메소드의 차이점 이해 (항목 15)

- 기본 클래스 (Item 19)에 정의 된 오버로드 메서드를 피하십시오.

- 깨끗하고, 최소이며, 완료된 방법 그룹을 만듭니다 (항목 22).

- 이터레이터 및 비동기 메서드에서 즉시 오류보고 사용 (항목 26)

- 비 동기 작업에 비동기 메서드 사용 (항목 27)

- 스레드 할당 및 컨텍스트 전환 방지 (항목 30)

- 예외를 염두에두고 PLINQ 병렬 알고리즘 구성 (항목 36)

- 스레드 생성 대신 스레드 풀 사용 (항목 37)

- 크로스 스레드 통신을 위해 BackgroundWorker 사용 (항목 38)

- 잠금 핸들 (Item 41)에 대해 가능한 가장 작은 범위 사용

- 동적 프로그래밍의 장단점 이해 (항목 43)

- 표현식 API (Item 46)를 최대한 활용하십시오.

- 공개 API에서 동적 객체 최소화 (항목 47)

 

소프트웨어는 재능보다는 훈련에 의존한다. 자신의 재능을 탓할 게 아니라 위에 소개한 책을 정독하고 하나씩 적용하다 보면 어느덧 능숙한 기술과 순준높은 전략으로 무장한 당신을 만나게 될 것이다.

 

목차는 아래와 같다.

 

목차

 

CHAPTER 1_ 데이터 타입

 

아이템 1_ 접근 가능한 데이터 멤버 대신 속성을 사용하라 

 

아이템 2_ 변경 가능한 데이터에는 암묵적 속성을 사용하는 것이 낫다 

 

아이템 3_ 값 타입은 변경 불가능한 것이 낫다 

 

아이템 4_ 값 타입과 참조 타입을 구분하라 

 

아이템 5_ 값 타입에서는 0이 유효한 상태가 되도록 설계하라 

 

아이템 6_ 속성을 데이터처럼 동작하게 만들라 

 

아이템 7_ 튜플을 사용해서 타입의 사용 범위를 제한하라 

 

아이템 8_ 익명 타입은 함수를 벗어나지 않게 사용하라 

 

아이템 9_ 다양한 동일성 개념들 사이의 상관관계를 이해하라 

 

아이템 10_ GetHashCode()의 위험성을 이해하라 

 

 

 

CHAPTER 2_ API 설계

 

아이템 11_ API에는 변환 연산자를 작성하지 말라 

 

아이템 12_ 선택적 매개변수를 사용하여 메서드 오버로드를 최소화하라 

 

아이템 13_ 타입의 가시성을 제한하라 

 

아이템 14_ 상속보다는 인터페이스를 정의하고 구현하는 것이 낫다 

 

아이템 15_ 인터페이스 메서드와 가상 메서드의 차이를 이해하라 

 

아이템 16_ 상태 전달을 위한 이벤트 패턴을 구현하라 

 

아이템 17_ 내부 객체를 참조로 반환해서는 안 된다 

 

아이템 18_ 이벤트 핸들러보다는 오버라이딩을 사용하라 

 

아이템 19_ 베이스 클래스에 정의된 메서드를 오버로드해서는 안 된다 

 

아이템 20_ 이벤트가 런타임 시 객체 간의 결합도를 증가시킨다는 것을 이해하라 

 

아이템 21_ 이벤트는 가상으로 선언하지 말라 

 

아이템 22_ 명확하고 간결하며 완결된 메서드 그룹을 생성하라 

 

아이템 23_ 생성자, 변경자, 이벤트 핸들러를 위해 partial 클래스와 메서드를 제공하라 

 

아이템 24_ 설계 선택지를 제한하는 ICloneable은 사용을 피하라 

 

아이템 25_ 배열 매개변수에는 params 배열만 사용해야 한다 

 

아이템 26_ 지역 함수를 사용해서 반복자와 비동기 메서드의 오류를 즉시 보고하라 

 

 

 

CHAPTER 3 태스크 기반 비동기 프로그래밍

 

아이템 27_ 비동기 작업에는 비동기 메서드를 사용하라 

 

아이템 28_ async void 메서드는 절대 작성하지 말라 

 

아이템 29_ 동기, 비동기 메서드를 함께 사용해서는 안 된다 

 

아이템 30_ 비동기 메서드를 사용해서 스레드 생성과 콘텍스트 전환을 피하라 

 

아이템 31_ 불필요한 콘텍스트 마셜링을 피하라 

 

아이템 32_ 비동기 작업은 태스크 객체를 사용해 구성하라 

 

아이템 33_ 태스크 취소 프로토콜 구현을 고려하라 

 

아이템 34_ 비동기 메서드의 반환값을 캐시하는 경우 ValueTask<T>를 사용하라 

 

 

 

CHAPTER 4 병렬 처리

 

아이템 35_ PLINQ가 병렬 알고리즘을 구현하는 방법을 이해하라 

 

아이템 36_ 예외를 염두에 두고 병렬 알고리즘을 만들라 

 

아이템 37_ 스레드를 생성하지 말고 스레드 풀을 사용하라 

 

아이템 38_ 스레드 간 커뮤니케이션에는 BackgroundWorker를 사용하라 

 

아이템 39_ XAML 환경에서 스레드 간 호출을 이해하라 

 

아이템 40_ 동기화에는 lock()을 최우선으로 사용하라 

 

아이템 41_ 락은 가능한 한 좁은 범위에 적용하라 

 

아이템 42_ 잠긴 영역에서는 외부 코드 호출을 삼가라 

 

 

 

CHAPTER 5 동적 프로그래밍

 

아이템 43_ 동적 타이핑의 장단점을 이해하라 

 

아이템 44_ 제네릭 타입 매개변수의 런타임 타입을 활용하려면 동적 타이핑을 사용하라 

 

아이템 45_ 데이터 주도 동적 타입에는 DynamicObject나 IDynamicMetaObjectProvider를 사용하라 

 

아이템 46_ 표현식 API의 사용법을 익혀두라 

 

아이템 47_ Public API에서는 동적 객체 사용을 최소화하라 

 

 

 

CHAPTER 6 글로벌 C# 커뮤니티에 참여하기

 

아이템 48_ 가장 인기 있는 답이 아닌 최고의 답을 찾으라 

 

아이템 49_ 명세와 코드 향상에 기여하라 

 

아이템 50_ 분석기를 사용해서 자동화 처리를 고민하라 

 

참고문서

1. https://www.ikpil.com/1159?category=267073 Effective C# 을 읽는다.

2. 나무 위키 https://namu.wiki/w/C%23 

3. http://www.csharpstudy.com/CSharp/CSharp-Intro.aspx 예제로 배우는 C# 프로그래밍

 

 

 

이펙티브 시리즈의 씨샵판.

그냥 이펙티브 아니고 More다. More Effective

솔직한 감상은, 어렵다.

절대로 지금의 내가 볼 수준의 책은 아니다.

책을 쭉 훑어본 개발자들이 하나 같이 씨샵을 능수능란하게 사용할 수 있는 개발자들이 보는 책 같다고 했다.

책 두께만 봐도 그렇다.

기본서들이 라면받침으로 쓸 수도 없게 두꺼운 것에 비하면 종이짝처럼 얇고 가볍다.

쓸데 없는 소리 다 빼고 핵심만 담았다.

구구절절할 필요가 없다. 이 책의 독자들은 이미 코드를 주물주물하는 데에는 이력이 났을 테니 말이다.

쭉 보다가 포기하고 필요한 부분만 쏙쏙 찾아 읽었다.


봐도 이해가 안 되는 부분이 더 많다.

하지만 나는야 북 콜렉터.

관심 있는 분야별로 기본서와 심화서를 갖추고 있다.

씨샵 개발자로 전향 후 기본서로는 '이것이 씨샵이다'를 봤고, 심화서로 이펙티브 시리즈를 '모셔두었다'.

책이 좋네 마네 할 필요가 없다. 책 제목이 모든 걸 검증하고 있다.


[포맷변환]S600IMG_5040.png

 

프로그램을 하려면, C, C++, JAVA, C#, 파이썬 등과 같은 프로그래밍 언어를 익혀야 한다. 그러기 위해서 보통 프로그래밍 언어 입문서 하나 정도는 완벽히 봐줘야 한다. 입문서 내용을 어느 정도 이해하는 수준이라면, 얼추 기본적인 프로그래밍 하는데, 크게 어려움은 없을 것이다. 

 

처음에는 if문, for문, 메소드, 클래스를 간단히 이용하는 정도에서 조금씩 상속과 추상 클래스와 같은 개념도 사용하고, 인터페이스, 람다식 등 좀 더 다양한 기능을 사용하게 된다. 윈도우 프로그램 같은 경우는 윈폼이나 WPF에 대해서도 익히게 된다.

 

그런데, 이렇게 프로그래밍의 내공이 쌓이면 쌓일수록, 의문이 하나 둘씩 쌓이기 시작한다. 예를 들어, 프로그래밍 문법에 나오는 방법이 과연 최선인지? 이 방법으로도 가능하고, 저 방법으로도 가능한데, 어떤 것이 맞는 건지? 어떤 차이가 있는지? 효율 차이가 어느 정도인지? 유지 보수를 대비한 적절한 프로그래밍 방법은 어떤 것인지?처럼 프로그래밍 언어의 문법적 사용에 대한 의문이 드는 것이다.

 

개발 현장에서는 일정으로 인해, 대부분 시간에 쫓기다 보니, 이런 의문을 스스로 풀어볼 시간이 없다. 괜히 이런 문제를 붙잡고 있게 되면, '여기가 연구소냐'하고, 핀잔 듣기 쉽다. 그렇지만, 이런 의문은 좋은 개발자로 성장하는데 꼭 필요한 요소라 생각한다. 이런 것들을 귀찮다고, 그냥 넘어가고, 바쁘다고, 건너뛰면, 개발자의 스킬은 정체되고 만다.

 

그럼 무조건 시행착오도 겪고, 검색하며, 검증하고 그런 막대한 시간을 써서라도 해야 할까? 물론 그게 가장 좋은 방법이겠지만, 그것도 능력이 어느 정도 돼야 가능한 것이다.

 

다행스럽게도, 우린 책이라는 막강한 도구가 있다. 최고의 전문가가 그러한 것들을 대신 연구하고, 최적의 길을 알려주고 있다.

 

C# 언어의 경우 그러한 역할을 해주는 책이 바로 빌 와그너의 'Effective C#'이고, 더 한 단계 나아간 책이 'More Effective C#'이다. 이 책들은 이미 많은 C# 개발자들이 봐왔던 책으로 그만큼 내용면에서 검증이 된 책이라 할 수 있다.

 

이번에 소개하려는 책은 'More Effective C# 2판'이다. 이 책은 C#을 어떻게 사용하면 좋을지를 말하고 있다. 즉 C#의 바른 사용법, 효율적인 사용법, 권장 사항에 대한 내용을 담고 있는 것이다.

 

 

 

 

 

[포맷변환]S600IMG_5041.png

 

우선 책 구성을 보면, 데이터 타입, API 설계, 태스크 기반 비동기 프로그래밍, 병렬처리, 동적 프로그래밍, 글로벌 C# 커뮤니티에 참여하기 이렇게 6파트에 50가지 아이템으로 되어 있다.

 

아이템을 몇 가지를 보면, '값 타입은 변경 불가능한 것이 낫다', '상속보다는 인터페이스를 정의하고 구현하는 것이 낫다', 'async void 메서드는 절대 작성하지 말라', '스레드를 생성하지 말고, 스레드 풀을 사용하라'와 같이 실제 프로그래밍에서 어떤 것이 좋은지, 그 이유와 잘못 사용 시의 문제점을 명확히 설명하고 있다.

 

그리고 이번 2판은 C# 버전 7을 기반으로 설명했으며, 오래된 기능과 기존에 나온 책의 내용을 재구성한 면도 있다고 한다.


 

[포맷변환]S600IMG_5042.png


개인적으로 자동화 프로그래밍을 자주 하다 보니, 동시다발적으로 발생하는 상황을 처리하기 위해, 병렬처리, 멀티스레드 등에 고민이 많았었다. 어떤 방법을 쓰는 게 맞는지, 많은 시간을 고민도 했었다. 그런데도 명확한 답을 내지 못했던 부분들이 있었다. 그런데, 이 책에 마침 풀지 못했던 것들에 대한 고민을 깔끔히 해소해줬다. 

스레드풀 사용에 대해서도, 처리시간 그래프까지 잘 나와 있고, 생성할 스레드 수에 대한 어드바이스 또한 아주 요긴했다.

 

 

[포맷변환]S600IMG_5043.png

 

BackgraoundWorker 경우 전부터 인터넷 검색에서 그걸 쓰라고 해서, 쓰기는 했는데, 정확히 알지 못하고 쓰고 있었다. 그러다 이번에 BackgroundWorker의 자세한 동작과 어떤 이점이 있고, 주의할 점이 무엇인지 확실히 알 수 있었고, 좀 더 폭넓은 활용에 대한 힌트도 얻었다.

 

아울러 그동안 습관적으로 써왔던 내 코딩 방법이 제대로 된 것임을 확인할 수 있었고, 왜 그렇게 쓰는 게 맞는지도, 그 이유와 함께 다시 한 번 확인할 수 있었다.

 

'More Effective C#'은 그리 두꺼운 책은 아니지만, 담고 있는 내용은 상당히 심도 있다. 그만큼 난도가 높은 책이다. 중급 또는 중상급 이상의 수준이다. C# 문법 지식이 확실하지 않으면, 내용 이해하기가 쉽지가 않을 것이다. 부분적인 이해뿐만 아니라, 전반적인 C# 문법 이해도 필요하다. 

 

그렇지만 혼란스러운 부분을 확실하고 깔끔하게 정리해주므로 꼭 봐야 할 책이라 생각한다. 특히 앞에서도 말했지만, '모어 이펙티브 C#'은 C# 전문가의 입장에서 C#을 어떻게 사용하면 좋을지를 말하고 있기 때문에 발전적인 C# 사용법을 익히는데도 큰 도움이 될 것이다.

이 책에서는 C#에서 제공하는 모든 기능이 실제 업무에서 어떻게 접목 시킬 수 있느냐를 중점으로 설명하고 있습니다.

따라서 C#에 대해서 지식이 없거나,  C#을 처음 접해본 개발자라면 이 책이 좋은 지침서가 될수는 없을 것입니다.

책에서도 어느정도 다를 줄 아는 독자가 대상이다 라고 언급하고 있습니다. C#을 처음 배우는 사람에게는 다른 책을 먼저 보고 오라는 이야기를 해주고 싶습니다.

 

책에서는 실무에서 대개 어떤식으로 개발이 이루어지는지에 대해서 설명하고 있습니다. 

데이터 타입 설정, API 설계, 태스크 기반 비동기 프로그래밍, 병렬 처리, 동적 프로그래밍 등등 주로 실무에서 많이 쓰여지는

기능들에 대해서 설명하고 있습니다.

 

제가 특히 눈여겨 본 부분은 태스크 기반 비동기 프로그래밍, 병렬 처리 부분이었습니다. 

이 책에서는 C# 기준으로 비동기 프로그래밍을 할 때 주의 해야 할 점에 대해서 많은 부분을 기술 하고 있었습니다.

병렬 처리 부분에서도 스레드 등을 사용 할 때 하지말하야 할 점에 대해서도 서술 하고 있습니다.

 

사실 이 책에 대해서는 좋은 점 보다는 아쉬운 점이 많았습니다. 앞서 C#에 대해 지식이 있는 사람이 읽어야 한다고 이야기 했지만,

필자는 많은 부분 이해가 안되는 부분이 많았습니다. ( 본인의 C#에 대한 이해도 수준이 떨어지는 거일 수 있... )

정확히는 ASP.NET 프레임워크에 대한 이해도가 깊어야 하며, 더 나아가서는 컴퓨터 알고리즘이나 컴퓨터에 대한 이해가 깊어야만 이 책을 온전히 이해 할 수 있겠구나 라는 생각이 들었습니다.

단순한 수준의 이해로는 이 책이 아무 쓸모 없는 책이 될 수도 있겠다는 생각이 들었습니다. 그리고 전체적으로 챕터의 제목들이 

.... 하지마라 또는 .... 하라 로 끝나고 있습니다. ( 이것은 옮긴이의 실수 일 수도 있다는 생각이 드네요? ) 명령어조 적 표현으로 일단 책을 읽는 사람은 나보다 한수 아래이기 때문에 내가 시키는대로 해 라고 해석이 되며, 책을 읽으면 읽을 수록 왠지 모를 이상한 기분이 들기까지 합니다.

 

    또한 좀 어이 없는 챕터로는 마지막에 글로벌 C#  커뮤니티에 참여하기 라는 챕터인데.. 스택오버플로 또는 깃허브에서 올바른 답을 얻는 방법에 대해서 알려주고 있습니다. 그리고 정확히는 이책에서 못찾은 답은 커뮤니티에서 찾으라는 직간접적인 방안을 제시하고 있습니다.

물론 이건 개발자 사이에서도 구도로 충분히 이야기 할 법한 해결안인것인데. 굳이 책에서 지면을 활용하면서 까지 이야기해야 하나 

싶기도 하였습니다. 

이번 시간에는 매력적인 프로그래밍 언어인 C#을 더 효율적으로 활용하는 방법을 소개한 에 대해 소개합니다. 이 책은 기존 에서 다루지 못했던 내용을 보강하여, 더 나은 C# 프로그래밍을 위한 새로운 전략과 기법을 50개의 항목으로 정리하여 소개하고 있습니다.

은 C# 7.0을 기준으로 설명합니다. 안타깝게도 C# 7.0의 새로운 기능을 모두 소개하고 있지는 않습니다만, 여기서 소개하는 내용을 학습하여 능숙하게 활용할 수 있다면, 더 나은 C# 개발자로 성장할 수 있을 것입니다. 

 

이 책에서 다루는 내용은?

자바에 조슈와 블로치(Joshua bloch)의 가 있다면, C#에는 빌 와그너(Bill Wagner)의 Effective C# 시리즈가 있습니다. 빌 와그너(Bill Wagner)의 Effective C# 시리즈는 여러 번 개정되었으며, 최신 버전은 입니다. 기존 에서는 C# 언어 요소, .NET 자원 관리, 제네릭, LINQ 활용법, 예외 처리 등에 대해 다뤘다면, 는 데이터 타입, API 설계, 비동기 프로그래밍, 병렬 처리 등에 중심을 두고 작성되었습니다. 

이 책에서 소개한 모든 내용을 지식 창고에 담아둬야겠지만, 최근에 필자가 관심을 두고 있는 비동기 기반 프로그래밍에 관심이 많은 상태여서 의 3, 4 챕터는 매력적이었습니다. 그뿐만 아니라, 이 책에서 소개하는 50가지 이야기 중에서 이미 알고 있거나 다른 곳에서 경험했던 내용은 더 정확하게 이해하는 데 도움을 받았습니다.

시리즈는 중급 서적이므로 입문서처럼 편집이 친절하지는 않습니다. 하지만 과한 친절은 오히려 이런 책을 읽을 때, 집중력을 떨어뜨릴 수 있습니다. 이 책은 책을 읽고 집중할 수 있도록 한빛미디어의 깔끔한 편집이 돋보입니다.

 

마치면서

한빛미디어의 은 약 10여 년 만에 개정되어 나온 개정판으로 C# 개발자라면 꼭 봐야 하는 매력적인 서적입니다. 안타깝게도 국내에서 C#의 인기는 자바와 비교해 부족합니다. 하지만 C#의 매력은 자바가 지닌 매력 이상이라 볼 수 있습니다.

개인적으로 C#의 인기가 낮은 점은 매우 아쉽습니다. 하지만 .NET Core가 출시된 만큼 C#의 인기는 올라갈 것으로 예상합니다.  <More Effective C# 2E>뿐만 아니라, 도 C# 개발자라면 반드시 찾아봐야 하는 서적입니다.

마지막으로 의 감촉은 독특합니다. 매우 부드럽고 고급스러운 느낌을 받습니다. 손에서 떼고 싶지 않을 만큼 말이죠.

C# 글로벌 전문가로 성장을 원한다면 꼭 필독을!!!!

MORE Effective C# 2

더 강력한 C# 코드를 구현하는 50가지 추가 전략과 기법

빌 와그너 지음 / 김완섭 옮김


 


 

이 책의 대상 독자는 C#을 주 언어로 하는 전문 개발자다.  

C# 구문과 기능을 이미 알고 있다고 가정하며 C#을전반적으로 다룰 줄 아는 독자가 대상이다. 따라서 이 책에서는 C# 언어의기본 기능이나 특징은 다루지 않는다. 대신 C#이 현재 제공하는모든 기능을 실제 업무에 어떻게 접목시킬 수 있는지를 알려준다.

 

C#의 기본 기능뿐 아니라 공용 언어 런타임Common Language Runtime(CRL)JITJust-In-Time 컴파일러에 대해서도 어느 정도 이해하고 있다고 가정한다.

 

이 책에서 제시하는 추천 기법 대부분은 로슬린Roslyn 기반 분석기및 코드 픽스를 사용해서 검증할 수 있다. 코드는 깃 허브(https://github.com/BillWagner/MoreEffectiveCSharpAnalyzers)에서관리한다. 코드에 대한 새로운 아이디어가 있거나 저장소에 참여하고 싶은 독자는 풀 리퀘스트나 이슈를작성하면 된다.

 

저자 빌 와그너(Bill Wagner)는 세계 최고의 C# 전문가 중 한명이며 ECMA C# 표준위원회 멤버이기도 하다. 스타트업부터 대기업에 이르기까지 다양한 기업의 개발 프로세스를 개선하고 개발팀을 성장시키는 일을 돕고 있다. 앞서 Effective C#을출간한 바 있다.


옮긴이 김완섭은 C#을 접한지 10여년이 넘고 IT 기술서를 30여권 번역한 전문가인데, 공교롭게도 일어.영어 C# 고급서를 모두 번역한 번역가라 한다. 현재  싱가포르의 한 국제 연구 기관에서 Technical Specialist로근무 중이며, 블로그(https://blog.naver.com/itbk100) IT 번역 관련 이야기와 싱카포르 직장 생활을 소개하고 있다.


이 책은 생각 이상의 깊이가 있는 책으로, C# 내부 깊숙히 파고들어 C#의 모든 것을 보여준다.
 
C#을 활용하여 프로젝트를 개발하는 중급 이상의 개발자에게 일독을 권할만하다.

개발중 접하게되는 다양한 부분의 문제를 해결할 실마리를 찾게 될 것으로 생각된다.

또한 C# 개발자로서 글로벌 전문가로 성장하기를 원한다면, 6장에서 소개하는 
글로벌 C# 커뮤니티에 적극 참여하기를 통해 글로벌 전문가로 성장하기를 기원한다. 

1.jpg

 

이펙티브 시리즈는 아는 만큼 보이는 책이라고 말하고 싶다.

 

책은 생각보다 얇고 노하우만 농축해서 정리해놓은 느낌이다.

 

개인적으로 책을 많이 사서 보는데,

 

10년이상 가지고 있는 책이 10권 좀 안된다.

 

그 10권은 모두 다 이해하고있는지 물어보면 딱히 그렇지도 않다.

 

필요할 때 열어서 볼 수 있는 엄청난 내공의 책이기 때문이다.

 

나는 이 책도 그런 시리즈라고 생각한다.

 

한 번 보고 버릴 책이라기보단 필요할 때마다 열어서 볼 수 있는 책.

 

내가 뭔가 어디서 막혀있을 때 아이디어를 하나라도 얻을 수 있다면

 

분명 그 책은 가치가 있는 책이다.

undefined

 

 

먼저 Effective C#(3판) 을 구입해서 보았거나 서점에서 흘려 보았을 분들, 저자가 ‘빌 와그너’ 인 거 까지 확인한 개발자들이라면 MORE Effective C# (2판)을 보고 (3판)이 나오기 이전판을 번역한 서적이라 생각했을 분들이 많을 것이라고 생각된다.   MORE Effective C# 은 Effective C# 시리즈의 한단계 업된  또다른 효율적인 내용을 담고 있다. 즉 한단계 업그레이드된 새로운 내용을 담은 책이다. 

Effective C# 시리즈가 그렇듯 C#을 시작한지 얼마 안되는 개발자, 아니 어느정도 경험과 연륜이 있는 개발자라도 약간은 어렵게 느껴질 수 있다. 하지만 책 속의 ‘50가지 추가 전력과 기법’  을 순차적으로 읽어 나가기 보단 현재 현업에서 내가 가장 필요로 하는 부분을 찾아 먼저 집중적으로 읽고 음미한다면 생각했던 것 보다 그리 어렵게 느껴지지는 않을 것이다.  

한가지 더 덧붙이자면 이전 시리즈에서 ‘C#언어요소’, ‘.NET 리소스관리’, ‘제네릭 활용’, ‘LINQ활용’,’예외처리’ 관련하여 50가지 전략과 기법을 C# 6.0 이상 기준으로 작성하였다면 이번 MORE Effective 시리즈(2판) 에서는 이전시리즈에 빠졌던 부분 C# 7을 기반으로 설명한다고 하지만 버전에는 크게 신경 쓸 필요는 없을 듯하다. 새로운 문법에 대한 기능을 위주로 다루는 것이 아니니까.

어째 든 단번에 모두 이해하려 하기보다는 여러 번 읽고 머리속에 담아 둔다면 현업에서 더  다양한 방법과 생각으로 최적의 프로그램 로직을 구현할 수 있게 만들어주는 책이라고 확신한다.

결제하기
• 문화비 소득공제 가능
• 배송료 : 2,000원배송료란?

배송료 안내

  • 20,000원 이상 구매시 도서 배송 무료
  • 브론즈, 실버, 골드회원이 주문하신 경우 무료배송

무료배송 상품을 포함하여 주문하신 경우에는 구매금액에 관계없이 무료로 배송해 드립니다.

닫기

리뷰쓰기

닫기
* 도서명 :
모어 이펙티브 C#(2판)
* 제목 :
* 별점평가
* 내용 :

* 리뷰 작성시 유의사항

글이나 이미지/사진 저작권 등 다른 사람의 권리를 침해하거나 명예를 훼손하는 게시물은 이용약관 및 관련법률에 의해 제재를 받을 수 있습니다.

1. 특히 뉴스/언론사 기사를 전문 또는 부분적으로 '허락없이' 갖고 와서는 안됩니다 (출처를 밝히는 경우에도 안됨).
2. 저작권자의 허락을 받지 않은 콘텐츠의 무단 사용은 저작권자의 권리를 침해하는 행위로, 이에 대한 법적 책임을 지게 될 수 있습니다.

오탈자 등록

닫기
* 도서명 :
모어 이펙티브 C#(2판)
* 구분 :
* 상품 버전
종이책 PDF ePub
* 페이지 :
* 위치정보 :
* 내용 :

도서 인증

닫기
도서명*
모어 이펙티브 C#(2판)
구입처*
구입일*
부가기호*
부가기호 안내

* 온라인 또는 오프라인 서점에서 구입한 도서를 인증하면 마일리지 500점을 드립니다.

* 도서인증은 일 3권, 월 10권, 년 50권으로 제한되며 절판도서, eBook 등 일부 도서는 인증이 제한됩니다.

* 구입하지 않고, 허위로 도서 인증을 한 것으로 판단되면 웹사이트 이용이 제한될 수 있습니다.

닫기

해당 상품을 장바구니에 담았습니다.이미 장바구니에 추가된 상품입니다.
장바구니로 이동하시겠습니까?

자료실