[베타리딩]객체 지향 디자인 패턴 – 전반부 서평

좋은 기회에 최범균님의 “객체 지향 디자인 패턴“책 출간 전 베타리딩을 하게 되어,

그 전반부에 대한 서평을 쓰게 되었다.

우선, 글을 읽으면서 내내 들었던 생각은

과연 자바언어를 사용하면서 클래스를 만들 때 얼마나 많은 생각을 하고 만들었나

하는 것이었다.

대학교에서 처음 자바언어를 접하고, 또 여러 책등을 통해 자바 언어를 습득하면서

단 한번도 저 문제에 대해 진지하게 생각해 본 적이 없었던 것 같다.

실제 사회생활을 하며 실무를 익힐때에도 마찬가지였다.

눈 앞에 보이는 문제를 해결하기 위해 API사용법이나 문법에 대한 부분은 공부 혹은

검색을 통해 근시안적으로 해결해왔지만, 이 책을 한장 한장 읽으면서 그러한 행동들을

반성하게 되는 계기가 되었다.

=============================================================

서론이 길었지만, 내가 이 책의 전반부를 보며 내린 결론은 결국,

좋은 객체지향 설계에서  좋은 코드가 나오고, 또 그것이 사용자에게

 좋은 품질의 서비스를 제공해준다

라는 것이다.

특히나 객체 지향의 장점은 요구사항의 지속적인 변화에 따른 “유지보수“에서 더 많은

장점을 발휘한다는 측면에서 1장을 시작하고 있다.

우리는 흔히 기존의 소프트웨어를 유지보수하면서, 무수한 if-else문의 향연을 적어도

한번쯤은 보았을 것이다. 그 소프트웨어를 유지보수 할때의 그 난감함이란 구지 말로

설명하지 않아도 될만큼 많은 시간과 인력을 필요로 하는 일이다.

이 책의 저자 또한 그러한 예제를 시작으로 해서, 데이터를 중심으로 절차지향적으로

작성된 코드를 점진적으로 객체지향으로 리팩토링 하는 과정을 쉽게 설명하고 있다.

그리고, 중간중간 리팩토링 이전 코드와 이후 코드를 비교하여 그림으로 도식화해서

설명하고 있으며, 리팩토링이 모두 끝난 후에는 바뀐 전체구조를 한 눈에 알아보기 쉽게

UML(Unified Modeling Language)로 보여주고 있는 점 또한 이 책의 장점이라 할 수 있다.

=============================================================

이 책 전반부에서의 또 하나 인상깊은 점은, 객체에 대한 정의를 다음과 같이 명확히

하고 있다는 것이다.

객체의 핵심은 기능을 제공하는 것

이 바로 그것이다.

서론에서도 언급했지만 프로그래밍을 하면서 객체의 정의에 대해 저렇게

간결하고 핵심을 찌르는 정의를 본 적이 없는 것 같다.

그 만큼 이 책의 저자는 객체 지향에 가장 기본인 객체(Object)를 정의하는 것에서

시작해 인터페이스와 클래스, 또 그들이 주고 받는 메세지,  객체의 책임과 크기, 

의존이라는 개념을 파일을 읽고 암호화해서 쓰는 예제의 리팩토링을 통해

잘 설명하고 있다.

또한, 객체 지향의 중요한 원칙인 “캡슐화“를 지키는 두 가지 원칙을 들어

  • Tell, Don’t Ask
  • 데미테르의 법칙(Law of Demeter)

객체 지향적으로 설계할 때의 중요한 과정인 캡슐화에 대한 중요성을 강조하고 있다.

=============================================================

3장에선 객체 지향이 주는 장점인 구현 변경의 유연함을 또 다른 기법으로

다형성“과 “추상화“를 설명하고 있다

다형성과 추상화는 여러 자바 기본서적에서도 다루고 있는 개념이지만 한편으로는

그 개념을 정확히 알고 프로그래밍 하는 개발자가 드문 것이 또한 현실이다.

그러한 점에서 특히 저자의 책에서 주목되는 부분은 “추상화“의 설명 부분이다.

2장에서 다뤘던 파일관련 예제를 들어 추상화를 설명하고 있는데, 그 중에서

중요하다고 생각되는 부분은

변화되는 부분을 추상화하는 것이다. 요구사항이 바뀔 때 변화되는 부분은

  이후에도 변경될 소지가 많다“이다.

그리고, 객체 지향의 유명한 원칙인 “인터페이스에 대고 프로그래밍 하기“를 설명

하면서도, 다시 한번 주위를 환기시키는 부분은 바로

인터페이스를 사용해야 할 때는 변화 가능성이 높은 경우에 한해서 사용해야 한다

라는 점이다.  추상화 과정을 통해 유연성을 얻게 된다고 해서 무턱대고 아무 곳이나

추상화한 인터페이스를 사용한다면 오히려 프로그램의 구조만 복잡해지고 유연함의

효과는 누릴 수 없는 상황이 발생하게 된다고 이 책의 저자는 경고하고 있다.

마지막으로, 지금까지 추상화한 과정을 테스트코드를 만드는 과정을 통해 그 이점을

부각 시키고 있다. 추상화를 하면 실질적인 구현체 없이 진짜처럼 행동하는 객체인

Mock객체를 통해 내가 만든 코드를 더욱 빠르게 테스트 할 수 있다는 것이 바로 그것이다.

=============================================================

끝으로, 전반부의 4장은 객체 지향의 주요 특징으로 “재사용“을 말하면서 그 예로

“상속”과 “조립(composition)”을 예로 들고 있다.

상속을 사용했을시 아래와 같은 3가지 문제점을

  • 불필요한 클래스 증가
  • 상위클래스의 변경이 어렵다는 문제점
  • 상속을 제대로 사용하지 않는 경우

“조립”이라는 방법으로 해결 할 있다는 점을 예제코드를 들어 설명하고 있다.

그리고 “조립”의 또 다른 장점으로 런타임에 조립 대상 객체를 교체할 수 있는 점을

들었다.  물론, 모든 상황에서 객체 조립을 사용해야 한다는 말은 아니며,

상속을 사용하다 보면 변경의 관점에서 유연함이 떨어질 가능성이 높으니

객체 조립을 먼저 고민하라는 것을 강조하고 있다.

이러한 객체 조립과 더불어 “위임(delegation)“에서는 대부분의 경우에 미세한

성능저하보다 위임을 통해서 얻을 수 있는 유연함과 재사용의 장점이 크다는 점을

강조하고 있다.

=============================================================

이 책의 전반부를 읽으면서 장점이라 느낀 점은 객체 지향의 주요 개념을 예제코드와

함께 명확히 설명하면서도, 그에 대한 이해를 그림과 UML로 돕고 있어 초급개발자도

쉽게 다가갈 수 있다는 것이다.

그리고, 중간중간 나오는 객체지향 설계원칙과 디자인패턴 또 부가적으로 공부해야 할

좋은 책들을 소개함으로서 객체 지향에 대해 수박 겉핥기로 공부하는 것이 아닌,

이 책을 통해 처음부터 기본기를 튼튼하게 다질 수 있다는 것도 큰 장점 중 하나일 것이다.

Advertisements

[베타리딩]객체 지향 디자인 패턴 – 전반부 서평”에 대한 1개의 생각

  1. 핑백: [2013]올해를 마치며.. 회고 | To the Professional Programmer

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중