Architecture
- 소프트웨어의 전체 구조를 의미한다.
- 개발자는 architecture 명세와 요구사항에 따라 디자인 패턴을 고른다.
- 컴포넌트의 세분성(granularity)을 정의한다.
Design pattern
- 컴포넌트가 어떻게 built되었는지에 초점을 둠.
- particular solution
차이점
- architecture의 경우 designing phase에서 고려되고, Design pattern은 Building phase에서 고려된다.
- architectural pattern은 도면(blueprint)과 같고 design pattern은 실제 구현과 같다.
- architecture는 소프트웨어 내의 다른 모든것들이 준수(adhere)해야 하는 베이스를 말하고, design pattern은 특정 문제에 대해 클래스를 구조화하는 방법을 말한다.
- 모든 Architecture는 design pattern이지만, 모든 design pattern은 architecture가 아니다(architecture $\in$ design pattern). MVC,MVVM은 둘 모두에 포함되지만, singleton design pattern은 architecture pattern이 아니다.
- Architecture
- 컴포넌트가 시스템 내부에서 어떻게 행동하고 통신할지에 대해 컴포넌트의 물리적인 구조를 설정해주고, 최종적으로 컴포넌트를 생성하기 위한 tool을 선택한다.
- Design
- architecture가 더 큰 그림을 그린다면, 디자인은 특정 컴포넌트를 구현하기 위해 디테일에 신경을 쓰는 과정이다. 컴포넌트의 디자인은 주어진 컴포넌트 작업을 만족시키기 위한 클래스, 인터페이스와 추상 클래스, 그리고 다른 Object Oriented feature를 통해 결정된다.