커뮤니티 뉴스 레터를 구독하다가 우연히 발견한 좋은 리소스 소개 페이지가 있어서 한글로 간단히 번역하여 블로그 아티클로 올려봅니다. Client App Dev MVP이신 Anoop Madhusudana님의 블로그로부터 발췌하여 인용한 것임을 밝혀둡니다. (http://amazedsaint.blogspot.com/2010/09/7-freely-available-e-booksguides-i.html)

Foundations Of Programming
다운로드 링크: http://codebetter.com/media/p/179694.aspx

이 e-Book은 단순 명료하면서도 이해하기 쉽게 구성되어있습니다. 특히, 프로그래밍에 첫발을 막 내딛은 - 혹은 - 아직 숙련되지 않은 개발자들에게 더 좋은 코드와 설계력을 부여할 수 있도록 도움을 줄 것입니다. 이 블로그를 운영하시는 MVP 분의 마음에 아주 쏙 드는 책이라는 인상깊은 설명도 덧붙여져있습니다. :-)

Microsoft Application Architecture Guide, 2nd Edition
다운로드 링크: http://www.microsoft.com/downloads/en/details.aspx?FamilyID=ce40e4e1-9838-4c89-a197-a373b2a60df2&displaylang=en

Microsoft에 의하여 작성된 e-Book이며, .NET Framework를 사용하는 개발자 - 또는 - 설계자들이 반드시 읽어보아야할 내용들로 구성되어있습니다. 이 도서를 통하여, Microsoft .NET 기반 소프트웨어 개발 환경에서, 디자인 기본 원칙이나 패턴을 성공적으로 개발하고 적용할 수 있도록 할 수 있습니다. 또한, .NET 기반에서 개발하는 동안 흔히 부딪힐 수 있는 문제점들에 대해 최적의 해결 방안을 언급하고 있으므로 엔터프라이즈 기반의 .NET 개발 환경에서 특히 유용합니다.

Rob Miles C# Yellow Book 2010
http://www.csharpcourse.com/

C#과 .NET의 컨셉을 쉽고 빠르게 이해할 수 있도록 도와줍니다. 이 e-Book을 통하여 최상의 구현 방법을 학습하고 패턴과 컨셉을 빠르게 습득하실 수 있습니다.

Threading in C#
http://www.albahari.com/threading/

제 블로그에서, 그리고 SQL Azure와 LINQ 세미나를 진행하는 동안에 자주 언급했던 무료 개발 도구인 LINQpad의 제작자이자 Microsoft MVP인 Joe Albahari님의 리소스입니다. 복잡하고 까다로울 수 있는 주제인 멀티 스레딩에 대해 알기 쉽게 쓴 책으로, 스레드에 대한 다양한 컨셉, 예를 들어 스레드 풀링이나 동기화, Non-blocking 동기화 등 다양한 주제들을 다룹니다. 그리고 특별히 요즈음 .NET Framework 4.0에서 강조되는 병렬 프로그래밍에 대한 이야기도 같이 소개하고 있습니다. e-Book으로도 다운로드 가능합니다.

Improving .NET Application Performance and Scalability
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=8A2E454D-F30E-4E72-B531-75384A0F1C47

이번에도 역시 Microsoft의 e-Book입니다. 여러분의 응용프로그램에서 발생할 수 있는 다양한 성능 상의 문제를 점검하고 해결할 수 있도록 도움을 주는 최상의 리소스로, 설계자, 개발자, 테스터, 관리자에 이르는 다양한 범위를 포괄합니다. e-Book의 후반에 수록된 부록에는 체크리스트가 있으므로, 체크리스트만을 따로 인쇄하고 책상 옆에 놓아두면 여러분의 응용프로그램을 스스로 점검해볼 때 매우 유용할 것입니다.

Applying Design Patterns
http://amazedsaint.blogspot.com/2009/06/software-design-patterns-for-everyone.html

디자인 패턴을 활용해보고 싶지만 어렵게 느껴지시나요? 그렇다면 이 리소스를 활용해보시면 좋을것 같습니다. 이 리소스에서는 디자인 패턴을 닷넷 개발 환경에서 어떻게하면 좀 더 쉽게 적용할 수 있을지 자세한 내용을 단계별로 소개하고 있습니다. 역시 e-Book으로도 다운로드 가능합니다.

RefCardz from DZone: Getting started with WCF 4.0
http://refcardz.dzone.com/refcardz/getting-started-windows-0

RefCardz from DZone: Getting started with Silverlight + Expression Blend
http://refcardz.dzone.com/refcardz/getting-started-silverlight

RefCardz from DZone: Essential F#
http://refcardz.dzone.com/refcardz/essential-f

위의 세 리소스는 e-Book은 아니지만 책상 옆에 놓고 쓸 수 있는 단어장 카드의 형태로 구성된 리소스입니다. 위 사이트에서 회원 가입을 하고 파일을 다운로드받아 카드로 오려서 바인더 링 등으로 매달아두면 생각날 때 마다 찾아볼 수 있는 여러분만의 리소스가 될 것입니다. 위에서 소개한 세 가지 카드 말고도 다른 카드들이 더 있으니 사이트 이곳저곳을 둘러 보시길 권합니다.

저작자 표시 비영리 동일 조건 변경 허락
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Windows Azure MVP 남정현 (rkttu.com)

아주 유용한 프로그래밍 기술을 하나 소개하도록 하겠습니다. 흔히 C/C++에서 사용되던 방법으로 몇 개의 수를 OR 연산으로 조합하여 하나의 매개 변수로 여러개의 의미를 해석하도록 매개 변수를 전달하는 방법입니다. 이것을 사용하면 오버로드를 최소화하면서 필요한 옵션 전달이 모두 가능하도록 메서드를 설계할 수 있습니다. 이것을 상수로 정의하여 전달할 수도 있지만 좀 더 세련되고 쓰기 쉬운 방법으로 나열 상수를 활용해보도록 합시다.

    [Flags()]

    [Serializable()]

    public enum Colors : int

    {

      None = 0,

      Red = 1,

      Green = Red * 2,

      Blue = Green * 2

    }

나열 상수의 값을 2의 배수 간격으로 띄웠습니다. 이것은 중/고등학교 수학 시간에 배웠던 "조합 (Combination)"이라는 수학적 원리에 기초합니다. 나올 수 있는 경우의 수를 살펴보도록 하지요.

  • 0: 아무 것도 선택 안함
  • 1: 빨간색
  • 2: 녹색
  • 3: 빨간색 + 녹색
  • 4: 파란색
  • 5: 빨간색 + 파란색
  • 6: 녹색 + 파란색
  • 7: 빨간색 + 녹색 + 파란색

유추된 경우의 수를 모두 세어보면 8가지입니다. 아무 것도 선택하지 않을 수도 있고, 적어도 1가지는 선택할 수도 있고, 2가지를 선택할 수도 있으며, 모든 것을 다 선택할 수도 있는 것입니다. 이러한 개념에 비추어 볼 때, 0은 아무 것도 조합하지 않았음을 의미합니다. 하지만 0보다 큰 1 이상의 모든 숫자들은 조합으로 나올 수 있는 내용들입니다. 이것들에 대한 의미를 정확히 파악하고 switch/case 구문으로 처리한다면 아주 간단합니다.

수학적 원리는 살펴보았고, 프로그래머의 입장에서 문법이 무엇을 의미하는지를 살펴볼 차례가 남았습니다.

나열 상수의 선언문 앞에 붙는 두 가지 특성이 있는데, FlagsAttribute와 SerializableAttribute입니다. Flags 속성은 등장할 나열 상수가 OR 연산이 가능함을 선언합니다. 이것을 붙이지 않으면 OR 연산을 위하여 반드시 (int) 라는 캐스트 연산자를 붙여야 하는 불편함이 따릅니다. 그리고 Serializable 속성은 나열 상수에는 관습 상 붙이게 됩니다. 또한, int 라는 형식 지정을 하게 되었는데 이것은 각 값들이 System.Int32의 값으로 캐스팅 될 수 있음을 약속하는 사항입니다.

그렇다면 옵션이 추가될 때 마다 특정 옵션이 정확하게 선택이 되었는지를 어떻게 확인할 수 있을까요? 사용자가 항목 선택을 위하여 OR 연산을 수행하였듯이 그 반대의 연산인 AND 연산을 수행하면 플래그의 수가 아무리 많더라도 플래그의 수 - 혹은 - 필요한 수 만큼 비교할 수 있습니다.

다음의 코드를 살펴보도록 합니다.

Colors nColors = Colors.Red | Colors.Blue;

if((nColors & Colors.Red) != Colors.None)
  Console.WriteLine("Red Selected.");

if((nColors & Colors.Blue) != Colors.None)
  Console.WriteLine("Blue Selected.");

if((nColors & Colors.Green) != Colors.None)
  Console.WriteLine("Green Selected.");


위의 코드를 실행하면 Red와 Blue가 선택되었음을 알리는 메시지가 콘솔 화면에 나타납니다. & 연산자를 이용하여 AND 연산을 수행하였을 때 특정 플래그가 선택되지 않았다면 0에 해당하는 값이 결과 값으로 나오게 되는 점을 이용한 것입니다.

많은 도움 되셨기를 바랍니다. :-)

크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Windows Azure MVP 남정현 (rkttu.com)