더 강력한 C# 코드를 구현하는 50가지 추가 전략과 기법
더 나은 코드를 작성하는 새로운 지침 50가지(C# 7.0 대응)
C#은 전통적인 .NET 기반 개발에서 유니티 게임 엔진으로 개발 영역을 확대하면서 더욱 주목받고 있다. 또한 자마린으로 다양한 모바일 플랫폼에 대응할 수 있어 수요가 계속 늘고 있다. 이 책은 소프트웨어 개발자가 C#을 더 효율적으로 사용할 수 있는 다양한 팁과 실용적인 방법을 제공한다. 특히 전작인 『이펙티브 C#』에서 미처 다루지 못했던 50개 추가 개발 지침을 선정해 자세히 다룬다.
저자는 자신의 노하우와 함께 개발 커뮤니티에서 제안한 개발 지침까지 고려해 매일 발생할 수 있는 문제를 해결할 강력한 새 솔루션을 제공한다. 전문가의 팁과 실용 예제 코드를 명확하게 설명한 이 책을 읽고 나면, 이미 익숙한 작업도 더 효율적이고 효과적으로 수행할 수 있게 될 것이다.
주요 내용
추천사
이 책의 초판 시리즈가 출간된 지 10여 년, 그간 눈부시게 발전한 C# 언어와 프레임워크의 새로운 면모와 더불어 C# 커뮤니티에 쌓인 지식을 담은 개정판을 만날 수 있다는 것은 C# 개발자들에게 큰 행운이다. 최근 한국어 개정판이 출간된 『이펙티브 C#』과 함께 『모어 이펙티브 C#』을 C# 개발자라면 반드시 읽어볼 것을 권한다.
김명신_『이펙티브 C#, 3판』 역자
기술 서적의 번역은 일은 결코 쉬운 일이 아니다. 물론 일반 번역가도 기술 서적을 번역할 수 있지만, 경험에 근거하지 않거나 배경지식이 없으면 독자가 납득할 만한 수준의 번역이 나오기 어렵다. 역자는 10년 이상 현업에 종사하면서 다양한 IT 프로젝트와 기술을 경험한 베테랑이다. 그뿐만 아니라 30권이 넘는 기술 서적을 번역한 몇 안 되는 기술 서적 전문 번역가이기도 하다.
이 책은 C#을 어느 정도 알고 있는 독자로 하여금 더 깊이 있게 이해하도록 도울 뿐만 아니라, 개념적으로도 자바나 다른 언어와 연계되는 심도 있는 부분까지 다루고 있어서 다른 언어 개발자에게도 도움이 될 것이다.
조대명_헬로마켓 CTO
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_ 분석기를 사용해서 자동화 처리를 고민하라