한때 소프트웨어 개발에서 모든 논의의 핵심은 디자인 패턴(Design Pattern)이었다. 개발자들은 밤을 세워가며 객체(Object), 응집도(Cohesion), 결합도(Coupling)에 대해 진지한 토론을 벌이기도 했다. 패턴이라고 하는 것은 일정한 형태나 양식 또는 유형을 의미한다. 소프트웨어를 설계할 때 패턴을 모르는 개발자는 자질(?)이 있는지 의심하는 정도의 분위기였다. 객체지향(Object-oriented)을 공부해야 하는 사람은 반드시 넘어야 할 산(山)이 디자인 패턴이었다.
그러나 어느 순간부터 개발현장에서 디자인 패턴을 논의하는 모습을 보기 어렵다. 디자인 패턴이 무엇인지 모르고 프로그래밍하는 개발자도 있다. 왜, 이런 현상이 발생하고 있을까? 국가에는 헌법이 있고, 기독교에는 성서, 불교에는 불경, 이슬람교에는 코란이 있는 것과 같이 SW개발에는 디자인 패턴이 존재한다고 할 수 있다. 고급 개발자로 성장하기 위해서 갖추어야 할 스킬은 크게 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)이 대표적인 분야가 될 가능성이 크다. 방대한 데이터를 저장하는 기술은 갖출 수 있지만, 이를 어떻게 분석해서 업무에 적용할 것인가는 아직 초보 단계이기 때문이다.
'Programming > PHP(더이상쓰지않음)' 카테고리의 다른 글
[PHP]sanitize_key() 함수 (0) | 2019.01.28 |
---|---|
[PHP]::(double colon, Paamayim Nekudotayim)과 ->(arrow)의 차이 (0) | 2019.01.28 |
[PHP]객체 상속(extends)에 대하여 (0) | 2019.01.28 |
[PHP]정적(static)에 대하여 (0) | 2019.01.28 |
[PHP]include와 require의 차이 (0) | 2019.01.28 |