본문 바로가기

개발자의 서재

More Effective C#. 빌 와그너 지음

반응형

어서와, 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#(윈폼)이 월등히 편리하다. 윈도우즈 개발자들이 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를 사용하라 

 

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# 프로그래밍

 

 

반응형

캐어랩 고객 지원

취업, 창업의 막막함, 외주 관리, 제품 부재!

당신의 고민은 무엇입니까? 현실과 동떨어진 교육, 실패만 반복하는 외주 계약, 아이디어는 있지만 구현할 기술이 없는 막막함.

우리는 알고 있습니다. 문제의 원인은 '명확한 학습, 실전 경험과 신뢰할 수 있는 기술력의 부재'에서 시작됩니다.

이제 고민을 멈추고, 캐어랩을 만나세요!

코딩(펌웨어), 전자부품과 디지털 회로설계, PCB 설계 제작, 고객(시장/수출) 발굴과 마케팅 전략으로 당신을 지원합니다.

제품 설계의 고수는 성공이 만든 게 아니라 실패가 만듭니다. 아이디어를 양산 가능한 제품으로!

귀사의 제품을 만드세요. 교육과 개발 실적으로 신뢰할 수 있는 파트너를 확보하세요.

지난 30년 여정, 캐어랩이 얻은 모든 것을 함께 나누고 싶습니다.

카카오 채널 추가하기

카톡 채팅방에서 무엇이든 물어보세요

귀사가 성공하기까지의 긴 고난의 시간을 캐어랩과 함께 하세요.

캐어랩 온라인 채널 바로가기

캐어랩