|
제프리 리히터의 .NET Framework에 대한 심도 있는 주제를 다루고 있는 Applied .NET Framework Programming이 번역된 이후 효율적인 활용, 설계 방법, 가이드라인 등에 대한 이렇다 할 만에 서적이 국내에는 출판되지 않았다. 어떻게 보면 .NET Framework으로 개발하는 국내 개발자들은 저주받았다고 봐도 이상하지 않을 정도다. MSDN이라는 방대하고 막강한 지원군이 있지만 많은 개발자들에게 아직 어려운 자료일 경우가 너무나도 많다. 모든 닷넷 개발자들이 MSDN을 효율적으로 사용할 수 있는 것은 아니다. 원서라도 거부감이 없는 개발자들은 원서를 주문해 읽지만, 원서에 알러지 반응을 일으키는 개발자들도 많으니 그만큼 효율적인 사용에 대한 마인드가 부족할 수 밖에 없다. 이런 상황에서 이펙티브 C#이라는 효율적인 활용을 다룬 서적이 번역되어 정말 반가운 일이 아닐 수 없다. 효율적인 활용에 대한 서적을 여러 권 가지고 있기 때문에 굳이 이 책을 구매해서 볼 이유는 없었지만, 동료 개발자들과의 스터디를 위해 공동으로 구매했다.
6 개의 주제 하위로 50 항목의 개발에 대한 지침들을 다루고 있는데, 보편적인 설계 규칙과 더불어 C# 또는 닷넷 프레임워크에 대한 이디엄들을 다루고 있다. 상당수 항목들이 기본적인 활용에 대한 지침을 다루고 있으며, 리플렉션, 애트리뷰트, 데이터바인딩과 같은 고급주제들도 다룬다. 너무나도 중요한 내용이라 버릴 것이 거의 없다.
1 장은 C#을 효율적으로 활용하려면 무조건 이해하고 숙지해야 하는 부분이다. 가장 기초적인 부분이다. 프로퍼티 사용이나 is 나 as 의 사용처럼 널리 알려진 것들도 있고 readonly, value 타입과 reference 타입의 구분과 사용, immutable 타입 등은 다른 일부 서적에서 확인할 수 있는 내용들이다. ITEM #2, ITEM #6, ITEM #9, ITEM #10 은 제리프 리히터의 서적에서 참고할 수 있다. ITEM #7 은 마틴 파울러의 리팩터링, 디자인 패턴 입문 [멀티쓰레드편]을 참조하면 이해에 도움이 된다. ITEM#6, TEM #8 은 Framework Design Guidlines 를 참조하면 이해에 도움이 된다.
2 장은 닷넷 프레임워크의 이디엄의 효율적인 사용에 대한 사항들에 대해 다루고 있다. 가비지 컬렉터에 대한 비교적 상세한 내용은 제프리 리히터의 서적을 참조하면 된다. 이 책에 나온 가비지 컬렉터에 대한 내용도 내공이 필요하지만 상세한 구동원리를 알고 싶다면 참고해도 좋다. Dispose 패턴은 많은 책에서 다루고 있는데, Framework Design Guideline, Programming .NET Components, .NET Gotchas, Applied .NET Framework Programming 등이다.이 내용은 MSDN에서도 Dispose Pattern이라고 검색하면 비교적 쉽게 검색해 알아볼 수 있다.
3장은 C# 환경하에서의 설계 방법론에 대한 내용을 다루고 있다. 이장의 대부분의 내용은 객체 지향적인 설계 방법론이나 패턴들을 알고 있다면 쉽게 이해할 수 있다. ITEM #24 에 애트리뷰트와 리플렉션에 대한 내용은 깊이 생각해 볼 필요가 있다.처음 C#을 공부할 때 가장 생소하게 활용 용도를 이해할 수 없었던 것들 중 하나가 바로 애트리뷰트였다. 왜 이런 걸 만든 것인지 이유가 몰랐다. 그 때 당시 출간된 모 C# 책에서도 갈팡질팡 했다. 한참의 시간이 흐른 후 이 애트리뷰트를 잘만 활용하면 간결하고 깔끔한 코드를 개발할 수 있다는 것을 알게 되었다.처음 C#이 정식으로 세상에 모습을 드려냈을 때, 자바 진영의 개발자들 사이에는 C# 언어(또는 닷넷)에 대한 품평이 진행 중이였다. 이 시점에 Thinking in Java 의 저자 Bruce Eckel 은 JDK 개발팀을 방문한 자리에서 C# 언어가 어떤지에 대해 물은 적이 있다. 이 질문에 대한 개발 담당자의 대답은 "C#은 생각했던 것만큼 대단하지 않다고 생각한다. 애트리뷰트라는 쓸만하다. JDK 5.0에는 이 기능을 추가하려고 한다" 라는 대화를 본적이 있다. 이것이 아마 JDK 5.0에서 추가된 Annotation 이 아닐까 생각한다. 이런 개념을 이전부터 가지고 개발을 진행했을 수 있는데, 중요한 것은 애트리뷰트에 좋은 점이 있기 때문에 이 기능을 추가했다는 것이다.
하이버네이트와 같은 ORM 프레임워크에서 닷넷은 애트리뷰트를 자바에서는 애노테이션을 사용할 수 있도록 해뒀다. AOP(Aspect Oriented Programming)도 애트리뷰트를 활용하여 설계할 수 있다. 귀찮고 효율적인 방법이 아니긴 하지 ContextBoundObject를 활용해 AOP를 구현할 수 도 있다. 이 방법을 AOP(Attribute Oriented Programming)이라고 하는 분도 계신데 아니라는 생각이 든다.
애트리뷰트에 대한 더 자세한 내용을 알고 싶다면, Applied .NET Attributes(Bock & Barnaby)를 읽어보면 도움이 될 것이다. 닷넷으로 개발을 할 것이라면 애트리뷰트와 같은 선언적 프로그래밍에 친숙해져야 한다. 닷넷은 대부분 선언적인 방법과 명령적인 방법 모두 지원한다. 유연성이 요구되는 경우에는 명령적인 방법을 사용해 코딩을 해야 하고 서버에서 구동되거나,자주 변경되지 않는 설정이라면 자기 기술적인 애트리뷰트의 활용을 고려해 봐도 좋다.ITEM #29의 내용은 비교적 쉬운 내용인데, 모르는 개발자가 많아서 좀 놀랐다.디자인 원칙에 따르면 new 키워드는 피해야 하는 게 당연하다.
4장 또한 객체지향 설계를 공부했다면 쉽게 알 수 있는 내용들이다. ITEM #40의 CLS를 준수하라는 내용은 좋다. 하지만 CLS만 준수한다고 해서 모든 문제가 해결되는 것은 아니다. 이런 내용의 예시를 보고 싶다면 .NET Gotchas 에 4장. Language Interoperability Gotchas, 6장. Inheritance and Polymorphism Gotchas를 읽어보면 이해할 것이다. CLS를 준수하는 것은 최소수준의 호환성을 보장할 뿐이다. ITEM #31은 처음 읽는 내용이라 참신했는데, 리팩터링의 작은 메소드 추구와 맞아 떨어지는 것 같다. 그 외의 장들은 객체지향 프로그래밍이나 웹 프로그래밍에 친숙한 개발자라면 문제없다.
5장은 기능을 만드는 것 보다는 이미 구현해 놓은 프레임워크를 사용하라는 내용이다. 데이터바인딩이나 닷넷 유효성 검증 기능은 꼭 사용해 볼만 기능이다. 웹 프로그래밍 같은 경우 데이터바인딩이 그저 그렇다. 약간 편하긴 한다. 윈도우 기반 개발에서는 데이터바인딩이 상당한 수고를 덜 수 있다. 데이터바인딩을 사용하기 전엔 Mediator 패턴을 사용해서 구현한 적이 있었다. 데이터소스 객체에 업데이트 작업, 관련 컨트롤의 UI 업데이트 등을 고려해 코딩을 하다 보면 소스는 거의 죽음 이였다.이 기능을 이용하기 알아서 데이터소스에 업데이트, 참조 컨트롤의 업데이트 등을 알아서 해주니 코딩 뿐만 아니라 로직도 간단해졌다. 데이터바인딩을 제대로 활용해 보려면 DataBinding with Windows Forms 2.0 (Noyes)을 읽어보길 권한다.
유효성 기능도 웹에서는 자주 사용하는데, 윈도우 프로그래밍에서도 사용하면 더 좋다. 유효성 검증 템플릿 메소드에 구현하면 정말 편하다. MSDN에 찾아보면, Chris Sells의 윈도우 기반에서의 유효성 컴포넌트 개발에 관한 글들은 읽어볼 만한 가치가 있다. ITEM #38 의 표준환경설정 메커니즘을 이용하라는 정말 중요하다. 기존 OS의 경우에는 이게 별로 중요하지 않았는데, 비스타에서는 상당히 중요한 내용이다. 알다시피, 비스타는 Administrator 권한의 사용을 제한한다. 제시한 표준 환경 설정을 지키지 않으면, 나중에 낭패를 볼 수도 있다. 별로 어려운 내용은 아니니, 꼭 익혀둘 필요가 있다.
ITEM #41,#42도 공부해 만한 내용이다. 자바의 새로운 버전이 나오면 가비지 컬렉터의 성능 향상과 리플렉션의 성능향상에 대한 글들이 항상 따라 다닌다.리플렉션의 성능이 중요한 이슈임은 분명하다.예전에 MSDN 에서 Gunnerson이 작성한 글에서 Class Type, Interface, Reflection 을 사용한 메소드 호출의 성능 비교를 본적이 있다.이 3 가지의 성능의 차이는 상당했던 것으로 기억한다.Class Type 호출과 Interface 호출 시에도 상당한 성능 차이가 있었다는 것에 조금 놀랐다.그래도 리플렉션에 대해서는 꼭 공부해야 한다. 유연성 있는 개발을 위해선 필요하다. 애트리뷰트와 함께 사용하면 더욱 유용하다. 자바 리플렉션의 지속적인 성능 향상이 부럽다.
6장은 비교적 중요도 낮은 장이다. C# 2.0이 한 장으로 다 설명할 수 있는 것도 아니고 ECMA 표준을 공부하라고 소개한 서적이 껌처럼 쉽게 읽을 수 있는 서적도 아니다. ITEM #50에 저자가 소개한 책들은 쉬운 책이 아니다. 어느 정도의 내공이 없으면 고생할 만한 책들이다 .차리리 그 책들 보단 .Net Framework Standard Library라는 책이 좋을 듯 싶다. 소개된 툴 중에서 FxCop은 작성한 코드가 가이드 라인에 얼마나 부합되는지를 점검할 수 있는 툴로 꼭 사용해 볼 만하다. 그러나 너무 얽매일 필요는 없다. 닷넷 프레임워크를 FxCop에 돌려봐도 상당한 경고들이 발견된다고 한다.
사견으론, 책의 이해수준은 개발자 역량에 따라 많이 차이가 나는 책이 아닐까 생각이 든다. 개인차에 따라 책에서 전달하는 내용 대부분을 아는 독자도 있고, 열심히 봤는데도 제목과 가이드라인 정도만 이해하는 독자도 있을 것이다. 난이도가 쉬운 편이 아닌데, 이 책의 구성이 설명 코드 중심이라기 보단 설명 위주로 되어 있다는 데 있다. 소프트웨어 설계 방법론이나 C# 언어를 제대로 익히지 않는 독자라면 설명만으로 이해할 수 있는 부분은 한계가 있을 듯 하다.
이 책의 전반적인 번역 수준은 높은 편이라 개발에 대한 경험과 지식을 갖춘 독자라면 이해하고도 남으리라 생각된다. 간혹 코드 주석을 복사해 붙여서 잘못된 부분이 있다. 주석을 봐도 몰라 원문을 찾아보고 잘못된 줄 알았다. 그 외 몇 가지 오탈자, 대소문자 구분들이 있지만, 그리 대단한 것은 아니다. 정오표는 한빛미디어 웹사이트에서 확인하면 된다. 원서에서도 석연치 않은 부분들이 조금 눈에 띄는데, 이렇다 저렇다 할만한 실력이 아닌 관계로 이야기 하진 않겠다.
|