처음 앱 개발을 하면서 디자인 패턴에 대해 고민하지 않았다. 필요한 기능만 수행되면 문제 없는거 아닌가? 당장 앞에 닥친 문제만 생각하고 개발하여 빨리 끝내는 것이 최선이라 생각했다. 하지만 앱은 릴리즈되고 사용자의 반응에 따라 수정이 필요했고, 소스 또한 수정이 필요했다.
규칙을 가지고 개발한 것이 아니라 닥치는대로 개발 하였기 때문에 내가 짠 소스임에도 불구하고, 이해하지 못하는 경우가 많았고 기능을 수정하는데 그만큼 오랜 시간을 보내게 되었다. 그러다 디자인 패턴에 관심을 가지게 되었고, 왜 디자인 패턴을 사용하는지에 대해 망각하지 않고자 블로그에 기록하게 되었다.

 

디자인 패턴은 사람들이 개발을 하면서 수많은 시행착오를 겪고, 구축해 놓은 좋은 설계들을 이용하여 새롭게 구축할 시스템에 사용하는 것이다. 디자인 패턴을 사용함으로 가장 큰 장점은 이전 사람들이 겪었던 시행착오를 또 겪지않아도 된다는 것이다. 그리고 좋은 설계는 향후에 유지보수, 시스템 확장등에 많은 도움을 준다. 닥치는 대로 개발했을 경우 수정사항이 발생한다면, 눈앞에 보이는 여기저기를 모두 뜯어고쳐야 하고 개발 작업 또한 한숨이 나올정도로 힘들 것이다. 나는 이런 경험을 통해 좋은 개발자가 되려면 어떤 설계를 염두에 두고 작업을 해야 하는지 고민하고, 기회가 된다면 다른 사람의 소스를 보면서 좋은 방법을 따라하는 습관을 가져야 한다는 생각을 하고 있다.

디자인 패턴은 객체지향 방법론에 기반을 두고 객체 지향 시스템을 보다 효율적으로 구축하는데 포커스를 맞추고 있다. 어떻게 하면 객체 지향의 장점을 활용할수 있을지 고민 해야한다.

디자인 패턴의 종류는 크게 3가지로 나눌수 있는데 생성패턴, 구조패턴, 행위 패턴으로 나눌수 있다.

 

1. 생성패턴

객체를 생성 참조하는 과정을 추상화하여 시스템이 객체의 생성과 조합등에 구애받지 않고 개발될수 있도록 도와준다.객체가 생성되고 변경되어도 시스템의 변화는 최소화 되도록 하며, 확장이나 유지보수 비용이 최소화 하도록 한다.

 

종류 : 싱글톤 패턴, 팩토리 메소드 패턴, 추상팩토리 패턴, 빌더 패턴, 프로토 타입 패턴 등

 

2. 구조패턴

다양한 클래스로 이루어진 시스템은 복잡한 구조를 가지는데 시스템이 복잡할 경우 종종 수정할 엄두를 내지 못하기도 한다. 개발을 잠시 중단 했다가 새로 시작하는데도 처음 접한것 처럼 머리가 백지장이 되는경우가 많다. 구조 패턴은 복잡한 구조를 가진 클래스를 어떻게 하면 쉽게 보기좋은 형태로 만들어 줄것인가에 대한 해답을 제시해 준다. 구조 패턴을 이용해서 시스템을 구축하면 새로운 기능을 가진 클래스 들을 보다 효과 적으로 만들수 있다.

 

종류 : 어댑터 패턴, Composite 패턴, 프록시 패턴, Bridge 패턴, Facade 패턴, Decorator 패턴, Flyweight패턴 등

 

3. 행위 패턴

객체 간에 행위나 알고리즘 과 관련된 패턴으로 분야에 따라 행위가 다른 객체로 옮겨지거나 알고리즘이 대체되는 경우가 존재하는데 많은 도움을 받을 수 있는 패턴이다.

 

종류 : 스트래티지 패턴, 템플릿 메소드 패턴, Chian of Responsibility 패턴, 커맨드 패턴, 인터프리터 패턴, Iterator 패턴 미디에이터 패턴, 옵저버 패턴, 스테이트 패턴, Visitor 패턴 등

 

디자인 패턴을 공부하면서 이 패턴은 참 대단하다하며 감탄하는 경우도 이 패턴은 왜 쓰는거지?라는 생각이들때도 있다.
디자인 패턴은 단순히 개발하는 패턴의 모음이기 때문에 꼭 하나의 패턴이 최고의 패턴이라는 생각하지 않는다. 패턴마다 장단점이 있고 써야 할 곳이 있다고 생각한다. 내가 구현하고자 하는 시스템이 꼭 필요한 패턴이 무엇인지 고민하고 향후 유지보수를 위해 어떤 패턴을 적용해야 할지 고민하는것도 꼭 필요하다고 생각한다.

+ Recent posts