반응형

 

객체지향 소프트웨어를 '잘' 설계한다는 것은 쉬운 일이 아닙니다.

게다가, 재사용할 수 있는 객체지향 소프트웨어를 만드는 것은 더 힘듭니다.

설계를 할 때에는 지금 당장 갖고 있는 문제를 해결할 수 있어야 하지만, 나중에 생길 수 있는 문제나 추가된 요구 사항들도 수용할 수 있도록 일반적이고 포괄적이어야 합니다.

이를 위해 설계할 때 고려사항으로 SOLID 원칙 등 객체지향적 소프트웨어 설계 방법론이 있고, 현업에서는 이에 따라 개발하기 위해 노력하고 있습니다.

 

개발의 경험이 쌓이다 보면 자신들이 전에 사용했던 코드와 유사한 기능을 구현해야 해서 이전의 코드를 들여다보는 경험을 종종 하게 됩니다. 그러다 전에 사용했던 해결책을 그대로 반복해서 사용하기도 하고, 변형해서 쓰기도 하고, 혹은 상황에 맞지 않다고 판단하여 다른 방향의 구현을 고민하기도 합니다.

 

디자인 패턴은 설계자로 하여금 재사용이 가능한 설계는 선택하고, 재사용을 방해하는 설계는 배제하도록 도와줍니다. 또한 패턴을 쓰면 이미 만든 시스템의 유지보수나 문서화도 개선할 수 있고, 클래스의 명세도 정확하게 할 수 있으며, 객체 간의 상호작용 또는 설계 의도까지 명확하게 정의할 수 있습니다.

 

간단하게 말해서 디자인 패턴은 설계자들이 "올바른" 설계를 "빨리" 만들 수 있도록 도와줍니다.

 

디자인 패턴(Design Pattern)이란?

디자인 패턴이란 기존 환경 내에서 반복적으로 일어나는 문제들을 어떻게 풀어나갈 것인가에 대한 일종의 솔루션 같은 것입니다. 디자인 패턴 계의 교과서로 불리는 [GoF의 디자인패턴]에서는 객체지향적 디자인 패턴의 카테고리를 "생성 패턴(Creational Pattern)", "구조 패턴(Structural Pattern)", "행동 패턴(Behavioral Pattern)" 3가지로 구분하고 있습니다.

 

생성(Creational) 패턴 구조(Structural) 패턴 행동(Behavioral) 패턴
Singleton Adapter Command
Abstract Factory Composite Interpreter
Factory Method Decorator Iterator
Builder Facade Mediator
Prototype Flyweight Memento
  Proxy Observer
    State
    Strategy
    Template Method

앞으로 다루게 될 패턴 포스팅에서는 다음의 네 가지 요소가 반드시 포함됩니다.

  1. 패턴 이름(Pattern Name)
     - 패턴의 이름은 해당 패턴의 솔루션을 담고 있는 경우가 많습니다. 따라서 설계에 대한 생각을 더욱 쉽게 할 수 있고, 개발자들 간의 의사소통이 원활해집니다.
  2. 문제(Problem)
     - 언제 패턴을 사용하는가를 서술하며 해결할 문제와 그 배경을 뜻합니다. 문제를 제시함으로써 패턴을 적용하는 것이 의미 있는 사례를 소개하겠습니다. 
  3. 해법(Solution) 및 구현(Implementation)
     - 앞서 2번에서 다룬 문제(Problem)에 대하여 어떻게 해결할 수 있을 것인가에 대해 해결책을 제시하고, Java를 통해 예제 코드를 다루겠습니다.
  4. 결과(Consequence)
     - 디자인 패턴을 적용해서 얻는 결과와 장단점을 서술합니다.

 

디자인 패턴을 공부하는 방법

개발자 세계에는 수십 개가 넘는 디자인 패턴이 있습니다. 사실 어떤 문제에 어떤 패턴을 사용해야 할지 판단하는 것은 참 어려운 일입니다. 특히 디자인 패턴에 대해 빠삭하게 알고 있지 않은 개발자라면 더욱 어려울 것입니다.

그렇기 때문에 어떤 패턴부터 어떻게 공부를 해야 할지 고민이 될 수밖에 없습니다.

 

정답이라고는 할 수 없지만, 제가 추천하는 디자인 패턴 공부 방법은 아래와 같습니다.

  • 생성(Creational), 구조(Structural), 행동(Behavioral) 패턴이 각각 어떤 문제들을 해결하는지 파악합니다.
  • 패턴들 간의 관련성을 파악합니다.
  • 비슷한 목적의 패턴들을 모아서 함께 공부합니다.
    예를 들어, 추상 팩토리 패턴을 공부했다면 이어서 팩토리 메소드 패턴을 학습해보고 각각 어떤 공통점과 차이점이 있는지 비교하여 헷갈리지 않게 정리해둡니다.
  • 디자인 패턴이 익숙치 않은 초보 분들은 패턴을 공부할 때에는 반드시 예제 코드를 직접 작성해봅니다.
    눈으로만 공부하는 것은 뒤돌아서면 까먹습니다. 다소 귀찮더라도 프로젝트에 적용한다는 생각으로 예제를 확실하게 이해하는 것이 중장기적으로 무조건 이롭습니다.

 


앞으로 이 카테고리에서 다룰 디자인 패턴 포스트들은 Java를 기반으로 예제가 다루어질 것이며, 그에 사용되는 클래스나 인터페이스에 관한 문법적인 지식은 안다는 가정하에 별도의 설명을 제공하지 않겠습니다. 

반응형
반응형