객체지향 방법론과 프레임워크 디자인 vs. 어플리케이션 디자인 차이
.Net/.Net Framework Design Guide Line 2010/02/03 14:59객체지향 방법론은 유지관리성에 최적화 되어 있고, 어플리케이션 디자인 적용에서 더욱 가깝습니다. 이 포스트에서는 어플리케이션 디자인, 커스텀 라이브러리 디자인, 프레임워크의 디자인에 적용되는 객체지향방법론의 약간 다른 접근에 대해서 서술합니다.
Framework의 탄생
운영체제 벤더 들은 추상화된 API를 제공함으로써 개발자들이 좀더 쉽게 어플리케이션을 개발할 수 있다는 것을 인지 하였습니다.
동시에 Object-Oriented 방법론은 확장성과 재사용성 강조하는 방법론 이었고, 운영체제 와 라이브러리 벤더들은 OO방법론을 채택하였습니다. 이것이 우리가 생각하는 Framework의 개념의 탄생입니다.
더 많은 벤더들이 서로 연결함으로써 하나의 어플리케이션을 완성할 수 있는 재사용 가능한 컴포넌트들을 제공하였고, 어플리케이션 개발자들은 더이상 매번의 개발마다 맨땅에서 시작하는 일이 없을 줄 알았습니다.
하지만, 몇몇 컴포넌트들은 서로 잘 접합되지 않고, 필요 없는 요소들로 가득한 경우가 많아서 생산성에 부정적인 영향을 주게 되었죠.
결국에는 재사용 가능한 컴포넌트들에게 공통적인 룰을 적용함으로써 일관성(consistency)과 이음매 없는 통합(seamless integration)이 가능하다는 것이 명확해 졌습니다.
이로써 객체지향 방법론은 프레임워크( Framework ) 에 뼛속 깊이 스며들게 됩니다.
하지만, 프레임워크 디자인에 객체지향 방법론을 적용할 때 주의해야 할 사항이 있습니다.
어플리케이션 디자인
어플리케이션 개발자들은 프레임워크 위에 커스텀 라이브러리를 접합시키고 이를 이용하여 하나의 어플리케이션을 개발합니다. 유지관리성이 중요한 요소 입니다.
과도한 엔지니어링(OverEngineered) 문제
커스텀 라이브러리 디자인은 어플리케이션 디자인 보다는 프레임워크 디자인 개념에 가깝습니다.
개발자들이 프레임워크 디자인을 하지 않더라도 커스텀 라이브러리 디자인은 어플리케이션 디자인과는 다른 접근이 필요합니다.
객체지향디자인 방법론은 유지관리성에 최적화 되어 있습니다. 이는 지나친 추상화와 상속 구조를 강요합니다.
기반클래스(Base Class)의 수정으로 파생된 모든 클래스를 관리할 수 있으며, 코드 재사용을 지원하며 , Single Control Management를 가능하게 하기 때문이죠.
문제는 지나친 추상화와 상속은 프레임워크와 라이브러리 사용자로 하여금 간단한 시나리오의 어플리케이션을 작성할 때에도 전문가 이기를 강요하게 됩니다.
확장성에 대한 조금 다른 접근
어플리케이션 디자인에서의 클래스의 봉인(sealing)은 프레임워크 디자인에서의 것 보다 일반적 입니다. 어플리케이션과 커스텀 라이브러리는 도메인 specific 적입니다. 도메인에서의 역할 이외에 상속 되거나 확장되지 않도록 하는 것이 중요하며, 프레임워크는 어플리케이션 과 커스텀 라이브러리의 경우보다 일반적으로 사용되거나 확장되도록 허용 하는 것이 중요합니다.
어플리케이션과 커스텀 라이브러리가 sealed 가 일반적이라면 프레임워크 디자인은 unsealed 로 확장성을 중시 하는 것이 일반적이라고 볼 수 있습니다.
Interface에 대한 관점
프레임워크 디자인 가이드라인으로는 Interface 보다는 Class의 사용을 가이드 합니다. 프레임워크는 라이프사이클이 길고, shipping 된 후에 Class는 변경 가능하지만 Interface는 변경 불가능하면, Interface의 변경은 모든 구현된 객체의 변경을 요구하기 때문입니다. Interface 보다는 Class가 좀더 유연하다는(flexibility) 관점입니다.
어플리케이션의 디자인에서는 Interface를 선택하는 것을 가이드로 할 수 있습니다.
결론
어플리케이션 디자인, 커스텀 라이브러리 디자인, 프레임워크 디자인에 모두 객체지향 디자인 방법론이 적용 되지만, 어플리케이션 디자인에는 유지관리성이, 프레임워크 디자인에서는 유연성과 확장성이 강조되고 커스텀 라이브러리 디자인은 둘 사이의 중간에 위치한다고 말 할 수 있습니다.
참조 : Framework Design Guidelines Second Edition , Addison-Wesley p.2, p32. p91.
'.Net > .Net Framework Design Guide Line' 카테고리의 다른 글
| Type Conveter의 네이밍 컨벤션은 어떻게 정해야 할까? (0) | 2010/02/16 |
|---|---|
| 객체지향 방법론과 프레임워크 디자인 vs. 어플리케이션 디자인 차이 (3) | 2010/02/03 |
| Entity Framework 에 대한 변론 (4) | 2010/01/20 |
| LINQ to SQL Behind the Scene (0) | 2009/12/30 |
| Entity Framework의 Lazy Loading에 관하여 (2) | 2009/04/03 |
| Dictionary<TKey, TValue> VS. Hash Table 성능 이슈 (0) | 2008/12/16 |
현재글 : 객체지향 방법론과 프레임워크 디자인 vs. 어플리케이션 디자인 차이 posted By - 반더빌트 2010/02/03 14:59



이올린에 북마크하기
이올린에 추천하기