다시뜨는 디자인패턴

다시뜨는 디자인패턴

한때 소프트웨어 개발에서 모든 논의의 핵심은 디자인 패턴(Design Pattern)이었다. 개발자들은 밤을 세워가며 객체(Object), 응집도(Cohesion), 결합도(Coupling)에 대해 진지한 토론을 벌이기도 했다. 패턴이라고 하는 것은 일정한 형태나 양식 또는 유형을 의미한다. 소프트웨어를 설계할 때 패턴을 모르는 개발자는 자질(?)이 있는지 의심하는 정도의 분위기였다. 객체지향(Object-oriented)을 공부해야 하는 사람은 반드시 넘어야 할 산(山)이 디자인 패턴이었다.

그러나 어느 순간부터 온.오프라인에서 디자인 패턴에 대한 관심과 디자인 패턴을 적용하는 프로그래머를 보기가 어렵다. 왜, 이런 현상이 발생하고 있을까? 그 원인에는 여러가지가 있지만 과거와 같이 모든것을 자체적으로 해결하던것을 많은 부분에서 외부에서 만들어 놓은부분 소프트웨어(프레임워크, 콤퍼넌트 등)를 활용하여 프로젝트를 수행 및 상용패키지를 커스트마이징하여 적용하는 빈도가 높아져 일어나는 현상으로 보인다.

하지만 소프트웨어는 공학이다. 공학에는 원리가 있듯이 소프트웨어 개발에도 과거 COBOL 시대에는 프로그래밍을 할때 구조적프로그래밍이 있었으며, Java, C#, C++ 등 객체지향 개발언어는 디자인 패턴 있다. 고급 개발자로 성장하기 위해서 갖추어야 할 스킬은 크게 3가지로 자료구조, 알고리즘, 디자인 패턴 등이다. 사실 특정 언어(예, Java, C++)에 대한 숙련도는 부차적인 문제인데도, 단순히 개발 언어 사용 능력만으로 개발자 역량을 판단하고 있는 경향이 있어서 안타깝기도 하다.

디자인 패턴(Design Pattern)의 개념

디자인 패턴은 설계의 재사용을 통한 생산성 향상 기법으로 반복적으로 나타나는 문제들을 해결해 온 전문가들의 경험을 모아서 정리한 일관된 해결책이라고 할 수 있다. 이는 소프트웨어 프로그래머들이 유용하다고 생각되는 객체(Object)들간의 일반적인 상호작용 방법들을 모은 목록이라고 할 수 있다. 디자인 패턴은 GoF(Gang of Four)에 의해 고안된 것으로 보는 것이 일반적이다. GoF는 에릭 감마(Erich Gamma), 리처드 헬름(Richard Helm), 랄프 존슨(Ralph Johnson), 존 블리스데스(John Vlissides)에 의해 고안된 것으로 알려져 있다.

디자인 패턴은 크게 3가지 유형이 있고, 각 유형은 클래스(Class)와 객체(Object) 관점으로 설명할 수 있다.

디자인 패턴
디자인 패턴

디자인 패턴 vs 아키텍처 vs 프레임워크의 차이

개발 언어를 선정하고 이에 따라 개발 공정을 준비하는 과정에서 혼란스러운 경우가 자주 있다. 패턴, 프레임워크, 아키텍처 등의 개념과 차이점을 제대로 이해하지 못하기 때문이다.

패턴, 프레임워크, 아키텍처
패턴, 프레임워크, 아키텍처

다시 정리하면 디자인 패턴이 실제로 적용 된 것이 프레임워크이고, 이를 바탕으로 실제 운영되는 SW로 구현한 결정체가 바로 아키텍처라고 할 수 있다. 따라서, 핵심 코드은 디자인 패턴을 바탕으로 구현되는 것이다.

디자인 패턴은 정말로 중요성이 작아진 것인가?

패턴의 중요성은 더욱 높아가고 있다. 그럼 왜 이러한 현상이 발생하는 것인가?

1) 패턴의 대중화(자동차 스틱과 오토 운전의 차이)
예전 자동차 변속기는 모두 스틱이었다. 초보자에게는 스틱과 클러치는 넘기 어려운 산이었다. 오토매틱 운전으로 바뀌면서 기어 조작이라는 불편함이 일순간에 사라졌다. 예전에는 모두 코딩을 통해서 구현하였다가 지금은 컴포넌트 등에 핵심 로직이 숨어버렸다. 따라서 개발자는 비즈니스 로직(Business Logic)만 신경 쓰면 된다.

2) 개발방식의 변화(프레임워크 기반 개발 방식)
대표적으로 MDD(Model Driven Development, 모델 기반 개발)을 꼽을 수 있다. 만들어진 기성품을 선만 연결하거나 Pseudo code를 통해서 구현하는 방식으로 진화하고 있다. 예를 들어 과거에는 JDBC Driver연결을 위해 실제 코딩 했지만 지금은 Drag&Drop방식으로 개발 방식이 변경되고 있다.

3) 솔루션 기반의 사용 문화(인건비의 부담)
점차 시스템을 자체 개발하기보다는 구현이 완료된 패키지를 구입한 후 이를 커스터마이징하여 사용하는 것이 일반화 되고 있다. 따라서, 예전보다 자체개발 프로젝트가 많지 않아지고 있는 것이 특징이라고 할 수 있다.

결국 디자인 패턴으로(빅테이터의 중요성으로 다시 떠오르는 디자인패턴)

그러나 결국 S/W개발은 디자인 패턴이 계속 중요할 것이다. 디자인 패턴은 단순히 개발에만 적용되지 않고 그 대상 범위가 오히려 확대될 것이다. 예를 들어 Cloud Design Pattern, Enterprise Integration Design Pattern 등이 대표적인 사례가 될 것으로 본다.

가장 주목할 분야는 AI와 디자인 패턴의 결합이라고 할 수 있을 것이다. AI를 적용하여 문제를 해결하는 방식은 지금까지와는 다른 새로운 접근이다. 어떤 문제에 대해서 전문가들이 이렇게 해결할 수 있다는 모범 답안을 제시하는 방식으로 디자인 패턴을 적용한다면, 매력적인 새로운 분야가 열릴 수도 있다. 데이터 패턴(Data Pattern)이 대표적인 분야가 될 가능성이 높다. 방대한 데이터를 저장하는 기술은 갖출 수 있지만, 이를 어떻게 분석해서 업무에 적용할 것인가는 아직은 걸음마 단계이기 때문이다.

Start typing and press Enter to search

Shopping Cart