숙련된 객체지향 사람들로부터 만들어진 디자인 패턴은 여러분의 프로그램 설계를 더 유연하고, 변화에 대응이 잘 되고 유지보수가 쉽게 만들어 줄 것입니다.
만약 여러분이 디자인 패턴을 그냥 지나가는 길에 마주친 기억 밖에 없다면, 디자인 패턴은 단지 여러분의 설계 고려 사항 중에 하나로 생각 될 것입니다. 객체지향 장인들이 한땀한땀 만든 디자인 패턴은 여러분의 프로그램 설계를 더 효율적으로, 유지보수가 쉽게 만들어 줄 것입니다. 그러니, 디자인 패턴은 개발할 때의 고려할까 말까 하는 대상이 더 이상 아닙니다. 여기 여러분이 반드시 디자인 패턴 적용을 해야하는 5가지 이유를 모아보았습니다.
1. 여러분의 삶을 재사용을 통해 안락하게 합니다.
소프트웨어 개발에서 지속적으로, 아니, 항상 프로젝트는 예상 보다 오래 걸리고 예산도 더 많이 쓸 것이라 예상합니다. 변화로 인한 것 때문입니다. 이러한 변화는 요구사항이 변하거나, 시스템이 지속적으로 성장하거나, 새로운 기능이 추가될 때 발생합니다. 또 성능을 최적화 할때도 일어나죠. 여러분은 이거 말고도 몇가지 더 이유를 생각해 낼 수 있을 것입니다. 문제는 이러한 변화를 최소화 하면서 어떻게 개발을 할꺼냐입니다. 다 떠나서, 소프트웨어 개발에서 가장 어려운 측면은 기존에 존재하는 코드를 어쩌면 다른 사람이 작성한 코드를 이해하는 것입니다. 그리고 그 코드 조각들을 새로운 버그를 넣지 않고, 의도치 않은 결과를 불러 일으키지 않도록 바꾸는 것이죠.
그러니, 결과는 어떠냐구요? 디자인 패턴은 만능키는 아니지만, 객체지향 설계에서 변화를 최소한으로 줄여줄 수 있는 기술을 제공합니다. 디자인 패턴은 여러분에게 전문가의 경험이 녹아들어 있는 기술을 제공하고, 여러분은 단지 그중에서 물건 고르듯이 하나 집어들기만 하면 되죠. 이러한 장인의 결정체들을 우리는 디자인 패턴이라 부릅니다. 그리고 이들은 이미 준비된 템플릿을 제공해서 여러분이 겪고 있는 공통적인 문제들을 해결할 좋은 해결책을 제시해 줍니다. 그리고 더 유지보수 하기 쉬운 객체지향 시스템을 만들어줍니다.
그러니, 객체지향 설계자들의 정수를 쓰는 것이 다시 꾸역꾸역 개발하는 것보다 낫겠죠?
2. 여러분의 객체지향 스킬을 향상시킵니다.
우리는 모두 객체지향의 꽃은 추상화, 상속, 다형성 그리고 캡슐화라고 생각하고 있습니다. 물론 맞습니다. 하지만, 객체지향 시스템 설계에서는 그게 다가 아닙니다. 사실, 이러한 이론을 적용한 일반적인 앱들에서는 코드 중복, 디자인의 파편화, 그리고 사용하는 클래스 수의 폭발적 증가 등의 문제를 가져오게 되어 있습니다.
디자인 패턴들의 기반을 보면 여러분은 객체지향의 기본을 넘어서는 디자인 철학들을 발견할 수 있을 것입니다. 이 철학들은 여러분이 클래스를 만들거나 이들을 가지고 조합을 맞출 때, 그리고 “다양한 방식의 캡슐화를 하기”, “상속을 넘어서는 컴포지션을 선호하기”, “클래스는 확장을 지양하고 수정에는 열려있어야 한다 등의” 가이드라인을 제공해 줄 것입니다. 이러한 철학들을 알게 되고, 이들이 어떻게 구성되는지를 알게 됨으로써 여러분은 더 멋진 객체지향 디자이너 혹은 아키텍트가 될 수 있습니다.
3. 라이브러리와 언어에서 패턴을 파악하기
디자인 패턴은 객체지향 설계 문제의 공통된 해결책을 제시합니다. 그말인 즉슨, 여러분의 설계 문제의 솔루션이라는 말입니다. 여러분은 디자인 패턴 모듈을 다운 받아서 추가 설치할 필요가 없습니다. 대신 여러분의 시스템에 이 디자인 패턴을 적용하는 것입니다. 즉, 여러분은 라이브러리, 패키지, 여러분이 사용하는 모듈에서 이들을 만날 수 있습니다. 예를 들어, 자바의 파일 I/O 패키지에서는 데코레이터 패턴을 사용합니다. 이 패턴은 여러분에게 파일 I/O의 핵심 기능을 사용할 수 있도록 하고 여기에 여러분의 필요에 따라서 추가 기능을 제공합니다. 이 패턴은 파일 I/O 시스템 설계에서 훌륭한 방법론이기도 합니다. 게다가 여러분이 만약 디자인 패턴에 친숙하다면 (특히 데코레이터 패턴에서는) 객체 설계에서 이들이 어떻게 동작하고 구현되는지 즉시 이해할 수 있습니다. 이러한 장점은 설계를 이해하는 것에 도움이 됩니다.
그러니, 여러분이 자바 File 객체(데코레이터 패턴)을 사용하던, 자바스크립트의 Event object(옵저버 패턴), Cocoa의 NSUserDefault 객체(싱글톤), 혹은 MVC 패턴을 적용한 UI 패키지를 사용하던지 관계 없이, 여러분은 새로운 라이브러리가 이미 패턴을 사용하고 있다는 사실을 알아 차릴 수 있고 이해할 수 있을 것입니다.
4. 공용어의 힘을 사용할 수 있습니다.
3번째 특징에서 이야기 했듯이, 디자인 패턴을 배워서 친숙해지는 것의 장점 중 하나는 이러한 공통적인 문제에 친숙해 질 수 있다는 점입니다. 한번 여러분과 여러분의 팀이 디자인 패턴을 이해하면, 동료들이 어떠한 의도로 설계를 하였는지 빠르게 캐치가 가능합니다. 예를 들어, 여러분의 동료가 설계의 새로운 파트를 작성할 것을 여러분에게 주문했다고 생각해봅시다. 여기에 동일한 설계를 기술하는 두가지 방법이 있습니다.
“자, 나는 broadcast라는 클래스를 만들었어. 이 클래스는 모든 객체가 이 클래스를 예의 주시하고 있지. 언제라도 새로운 데이터가 이 클래스로부터 만들어지면 모든 리스너가 이 메시지를 받아. 가장 멋진 점은 리스너가 broadcast에 어 때이든지 참가할 수 있고 빠질 수 있다는 거야.”
아니면,
“자, 난 broadcast 클래스를 옵저버 패턴으로 만들었어”
첫 번쨰 기술에서는 여러분은 broadcast 클래스가 정말 뭘 하는지 이해하는데 많은 생각을 해야만 했습니다. 두번째는 여러분이 이미 이 문장을 보자마자 알차릴 수 있죠. 이게 바로 디자인 패턴을 사용하는 것의 힘이기도 합니다. 만약 여러분이 패턴의 용어로 의사소통을 한다면, 다른 개발자들도 즉시 여러분이 무슨말을 하고싶어 하는지 캐치할 수 있을 것입니다.
5. 진리와 아름다움을 찾을 수 있습니다.
객체지향 시스템을 여러분이 한땀한땀 만드는 것이 매우 많은 노력을 요구함에도, 디자인 패턴은 이러한 노력과 지혜를 패턴을 이해함으로써 얻을 수 있습니다. 우리가 이미 전술한바와 같이 디자인 패턴은 단순히 고안되고 발명된 것은 아닙니다. 이들은 부단한 노력과 많은 시스템을 구축한 경험을 바탕으로한 깊은 통찰에서 비롯된 것입니다. 여러분이 디자인 패턴을 배우면, 여러분이 마치 숙련된 소프트웨어 아키텍트의 어깨 위에 있는 듯한 느낌을 받게 될 것입니다. 더 쉽고 좋고, 유지보수가 용이한 소프트웨어를 만들 수 있게 되는 것이죠.
디자인 패턴을 오늘부터 배워보세요!
10년전에 우리는 기본 객체지향 디자인 패턴과 철학을 배울 수 있는 책을 만들었습니다. Head First Design Patterns이죠. 그리고 이 책은 Jolt 상을 수상했습니다. 그리고 오라일리의 베스트 셀러에 있고 수만명이 이 책으로 디자인 패턴을 공부했죠.
*****
원문 : 5 reasons to finally learn design patterns
번역 : 김준호
이전 글 : 메이커 페어 서울 2016, 다시 보는 생생한 만들기 축제 현장
다음 글 : 파티클 포톤으로 네오픽셀 닌자 마스크 만들기