Page 13 -
P. 13

내재되어 있었습니다. C++는 급속히 발전했으나 언어 자체가 복잡해서 메모리 누수, 부실한 객                              1

                        체 설계, 안전하지 않은 메모리 사용, 관리하기 곤란한 레거시 코드 등으로 많은 개발자를 버그의
                        구렁텅이로 빠뜨렸습니다.                                                                     디자인 패턴이란?

                        한데 이들을 고생시킨 문제는 대개 유사한 패턴을 띠고 있어서 개발자들은 혹여 누가 예전에 같
                        은 문제를 이미 겪어보고 해결하진 않았을까 추측을 하기 시작합니다. 객체 지향 프로그래밍 개념
                        이 처음 등장한 때는 인터넷이 없던 시절이라 자신의 경험을 다른 개발자와 나누는 데 한계가 있
                        었죠. 그래서 잘 알려진 반복되는 문제들을 GoF가 패턴으로 묶어 틀을 정립하기까지 다소 시간이

                        걸렸습니다.




                        1.1.2 패턴의 실제


                        디자인 패턴은 여러분이 앞으로 부딪힐 여러 문제를 해결하는 데 유용한, 검증된 풀이집이자 오랜
                        세월 축적된 지혜와 경험을 개발자 간에 공유하고 소통하는 데 필요한, 우수한 어휘집입니다.

                        그렇다고 디자인 패턴이 만능이란 건 아닙니다. 프레임워크, 도구 세트처럼 곧바로 꺼내쓸 수 있
                        지도 않죠. 그럴싸한 패턴을 골라 상사 비위를 맞추려고 남용하다간 문제 해결은커녕 잡다한 버

                        그, 비효율적인 설계, 성능 저하, 난해한 유지보수 등 이슈가 들끓는, 쓸데없이 복잡하면서 기술을
                        과하게 쓴 시스템이 되기 쉽습니다. 패턴은 이미 알려진 설계 문제를 해결할, 미더운 답안을 제시
                        하면서 다양한 프로그래밍 언어 개발자가 서로 같은 용어를 써서 효과적으로 소통할 수 있게 해줍
                        니다. 문제가 생길 우려가 있는 부분에만 패턴을 사용하세요.

                        디자인 패턴은 세 가지 유형으로 나눕니다.

                           ●     생성 패턴(creational pattern) - 객체 생성, 초기화, 클래스 선택에 관한 패턴(예: 싱글톤(4장 싱
                             글톤 패턴), 팩토리(6장 팩토리 패턴))

                           ●    행동 패턴(behavioral pattern) - 객체 간 소통, 메시징, 상호 작용에 관한 패턴(예: 옵저버(11장
                             옵저버 패턴))

                           ●    구조 패턴(structural pattern) - 클래스와 객체 관계를 조직하는 패턴. 관련된 객체를 서로 묶어
                             원하는 로직을 구현하는 방법을 안내합니다(예: 장식자(7장 장식자 패턴)).


                        디자인 패턴은 개발자 세계의 공용어 사전입니다. 개발자는 문제가 있을 때 머릿속에서 해결안을
                        쥐어 짜내지 않아도 패턴을 매개로 훨씬 쉽게 동료와 소통할 수 있습니다. 로직을 런타임에 동적
                        으로 어떻게 추가하는지 옆에 앉은 개발자에게 알려주고 싶다고요? 일일이 단계별로 그림을 그려



                                                                                                      027





         java_06.indd   27                                                                       2017-02-28   �� 3:00:50
   8   9   10   11   12   13   14   15   16   17   18