Dev Note/Design Pattern2008. 3. 10. 00:33

Design Pattern이 있고, 그 이면에는 Anti Pattern이 있다.

-- Anti Pattern 이란?
Anti Pattern을 간단히 얘기하면 패턴과 반대로 프로그래밍을 하는 과정에서 프로그래머들이 흔히 범하기 쉬운 바람직하지 않은 방법들과 그로 인한 폐해를 의미한다.

Design Pattern의 출현은 프로그래머들에게 지금까지 있었던 가장 효과적인 가이드 라인을 제공해 주었다. 이들 패턴들은 개발 중에 나타나는 복잡한 구조와 문제들을 정리해 주었고, 소프트웨어 개발을 편리하게 도와주는 방안도 다양하게 개발되어 왔다. 그러나, 이들을 도입하여도 프로젝트는의 상황은 반드시 좋아지는 것은 아니다. 많은 단체 또는 개인이 창의적이고 혁신적인 방법을 개발하여 제공하여도 소프트웨어 개발의 성공 가능성은 낮은 것이 현실이다.

수많은 소프트웨어 개발 프로젝트가 진행이 된다. 그러나 그 수많은 프로젝트 중 거의 대부분이 취소되거나, 최초 예상했던 예산과 기간보다 더 많은 비용이 투입된다. 많은 프로젝트의 실패들과 옳바르지 못한 개발 산출물들은 성공한 프로젝트의 것과 마찬가지로 아주 중요한 가치를 지니는데, 왜냐하면 이것들이 모든 프로그래머들에게 가지지 말아야 할 방향들을 알려주고 있기 때문이다. 이들이 바로 Anti Pattern 이다.

-- Anti Pattern이 발생하는 측면

  1. 관리상의 Anti Pattern : 프로젝트의 프로세스와 프로젝트 구성원의 잘못된 관리
  2. 아키텍쳐 상의 Anti Pattern : 설계와 구조상의 잘못 된 정의
  3. Object 설계 Anti Pattern : Object를 설계상의 잘못 된 정의
  4. 방법론 상의 Anti Pattern : 개발 방법론 상의 절못 된 정의 또는 잘못 된 진행
  5. 설정관리 상의 Anti Pattern : Version 또는 Configuration 관리 상의 잘못 된 정의
  6. 개발상의 Anti Pattern : 코드 상의 잘못 된 사례

-- 잘 알려진 Anti Pattern

  1. 스파게티 코드 (Spaghetti Code - 개발) : 개발과정에서 다양한 기능들을 추가 또는 유지보수에 의해 코드가 복잡하게 꼬여 버린다.
  2. 스토브 파이프 시스템 (Stovepipe System - 아키텍쳐) : 다양한 솔루션들을 확실한 추상화의 개념 없이 임의로 묶어 하나의 제품을 만들면 신뢰성이 떨어지며 유지보수가 힘든 제품이 탄생된다.
  3. 분석 마비 (Analysis Paralysis - 관리) : 분석 단계에서 완벽하고 완전한 분석을 꿈꾸면 이는 소프트웨어 개발 진행을 마비 시켜 버린다.
  4. 신의 객체 (God Object - Object 설계) : 하나의 객체에 너무 많은 기능과 인터페이스를 담아버리면 복잡하고 유지보수하기 힘들고 상호 의존성이 높은 클래스가 탄생된다.
  5. Singletonitis (Object 설계) : Singleton Pattern의 불필요하게 남용
  6. Yo-yo Problem(Object 설계) : 구조를 지나치게 분리하게 되면, 더욱 이해하기 힘든 구조가 된다. 
  7. Action at a Distance (개발) : 예상되지 않은 상호작용은 시스템을 광범위하게 구분해 버린다. 
  8. 변조 된 요구사항 (Phony Requirements - 아키텍쳐) : 프로젝트에서 모든 요구사항이 문서로 상세화 되지 않고, 유선이나 개개인의 구두로 전달이 된다면 변조(허위) 된 요구사항이 발생된다.
  9. 애매한 관점 (Ambiguous Viewpoint - 개발) : 명확하지 않은 관점에서 모델링을 수행하면 객체 모델링에서 객체들을 정확하게 정의 할 수 없다.
이상 Anti Pattern에 대해 간략하게 알아봤는데, 추가로 Anti Pattern에 대해 좀더 이해하고, 이를 개발과정에 반영하기를 원한다면 다음의 책들을 참조하기 바란다.

Anti Pattern wiki article : http://en.wikipedia.org/wiki/Anti-pattern
Anti Patterns : Refactoring Software, Architectures, and Projects in Crisis,1998 by William J.Brown & …
Anti Patterns and Patterns in Software Configuration Management, 1998 by William J.Brown & …
Posted by as.wind.914