Skip to content

Instantly share code, notes, and snippets.

@vandbt
Last active May 21, 2018 02:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vandbt/06a48eb182a4131259a3f134832152aa to your computer and use it in GitHub Desktop.
Save vandbt/06a48eb182a4131259a3f134832152aa to your computer and use it in GitHub Desktop.
소프트웨어 개발에서의 패턴(Pattern)

pattern growing fractal

소프트웨어 개발의 목적은 어떠한 문제를 해결하는 것 입니다. 원래의 의도대로 정확하게 구동 되는 것이 가장 첫번째 달성해야 하는 목표라고 할 수 있습니다. 허나 소프트웨어는 구동되는 것 만이 전부가 아닙니다. 잘 개발된 객체지향 소프트웨어가 가져야 할 특성은 구획화 된 모듈성 modularity, 변경을 반영할 수 있는 유연성 flexibility, 요구 추가를 위한 확장성 extensibility, 이 요소들을 갖추고 있으면서도 소프트웨어가 생명주기동안 살아 있을 수 있도록 하는 유지관리성 maintainability 입니다.

언급한 특성들을 갖추게하는 증명된 방법 그 것이 바로 '패턴 Pattern' 입니다.

소프트웨어를 개발하다 보니 구현 코드는 달라도 유사한 문제가 발생하는데, 그 때 패턴을 사용하게 되고, 개발 관련자들 사이에 의사소통 도구로 사용됩니다. 또한 잘 구성된 패턴은 해결하려는 문제가 무엇인지 유추 가능케 합니다.

패턴이라는 것은 어떻게 공부 할 수 있는가?

패턴에는 레벨이라는 것이 존재 합니다. 코드, 클래스, 아키텍처 레벨로 구분할 수 있습니다.

코드 단위의 패턴을 공부할 수 있는 가장 좋은 책은 [켄트 벡의 구현 패턴] 입니다. 코드 단위의 문제해결에는 수많은 방법이 존재합니다. 코드는 컴퓨터, 자신 그리고 동료와의 의사소통 입니다. 정확하게 구동되어야 하고, 군더더기 없이 의도를 밝히는 코드가 좋은코드의 조건이죠. 개발자는 한땀 한땀 작성 할 때 마다 수많은 고민과 선택을 합니다. 좋은 코드의 조건을 만족시키기 위해 말이죠. 켄트 벡의 책은 코드 구현 단위에서의 고민을 덜어 줄 수 있는 패턴을 이 책에 담고 있습니다.

구현 코드를 감싸는 클래스 단위에서 그 유명한 디자인 패턴 Design Pattern 이 등장합니다. 재사용 가능한 소프트웨어 개발에 대한 고민으로 시작된 객체간의 관계 패턴으로 구조 Structural, 생성 Creational, 행위 Behavioral 의 세가지로 구분되어 있습니다. 디자인 패턴을 공부할 수 있는 책들은 다수가 존재하는데 우선 바이블 [GoF의 디자인 패턴 ] 을 빼놓을 수 없습니다. 디자인 패턴은 구현패턴에 비해 어렵습니다. 여러권의 책을 읽어야죠. 마틴 파울러의 [리팩토링]은 구현패턴과 디자인패턴을 커버합니다. 특히 구조적코드 Structural code가 객체적 코드, 디자인으로 어떻게 변경되어야 하는지 체감 수준의 책입니다.

세번째 아키텍처 패턴입니다. 패키지, 모듈, 레이어 수준의 패턴을 의미합니다. 좋은 책으로는 마틴 파울러 [PoEAA (Patterns Of Enterprise Application Architecture)] 와 좀더 추상화된 설명으로 에릭 에반스의 [도메인-드리븐 디자인]이 있습니다. 여기서 언급되는 것들은 레이어링, 도메인 로직, 데이터베이스 매핑, 어그리게이트, 리파지터리의 개념들 입니다.

코드 단위

켄트 벡의 구현 패턴, 켄트 벡저/전동환역, ISBN-10: 108960770310

클래스 단위

  • GoF의 디자인 패턴 : Elements of Reusable Object-Oriented Software, 에릭 감마,리처드 헬름,랄프 존슨,존 블라시디스 공저, ISBN-10:8945072144
  • Refactoring 리팩토링 : 나쁜 디자인의 코드를 좋은 디자인으로 바꾸는 방법, 마틴 파울러 저/윤성준,조재박 공역, ISBN-10:898793960X

패키지, 모듈, 레이어 단위

  • Patterns of Enterprise Application Architecture, Martin Fowler, ISBN-10: 0321127420
  • Domain-Driven Design : Tackling Complexity in the Heart of Software, Eric Evans, ISBN-10: 0321125215
끝.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment