7. 아키텍처와 패턴
아키텍처란?
서브시스템 수준의 덩어리화 작업
다양한 수준에서 구성요소의 역할과 구성 요소 간의 관계에 집중
아키텍처 스타일
1) Client-Server Architecture
서버 : 클라이언트가 요청하는 기능이나 자원을 제공
클라이언트 : 자원의 사용을 위해 서버에 접속
2) Layered(tier : 층) Architecture
Front-End, Back-End
자신의 바로 하단층의 API를 이용해서 만들어짐
하위층으로 갈 수록 Low-Level의 영역
3) MVC(Model-View-controller) Architecture
Model = 공유데이터, View = 사용자 UI, Controller = 처리, 계산 등을 수행
모듈이나 클래스를 설계할 때 공유데이터파트, 사용자UI파트, Controller파트를 분리
4) Pipe & Filter Architecture
Sequential cohesion을 시스템 전체영역으로 확장해서 System을 만듬
5) Repository Architecture
Repository : 공유저장소(DB, file, ...)
모듈간의 interface는 없다.
Repository 사이에 interface만 존재
새로운 모듈을 붙히고 싶으면 다른모듈을 알 필요가 전혀 없다
레포지토리의 변경은 조금 많이 어렵다.
6) Peer-to-Peer 스타일
7) Event Driven Architecture
이벤트를 기반으로 아키텍처를 구성한다.
디자인 패턴
소스코드레벨에서 클래스 구조를 패턴화 시킨 것
(아키텍처 설계 수준보다 낮은 수준의 설계 문제에 재사용 가능한 솔루션을 제공)
3가지 유형의 디자인 패턴
Creational Pattern :
객체를 생성하는데 관련된 패턴들 객체가 생성되는 과정에 유연성을 높이고, 코드의 유지가 쉬워진다.
Structural Pattern :
프로그램의 구조에 관련된 패턴들 프로그램내의 자료구조나 인터페이스 구조 등 프로그램의 구조를 설계하는데 많이 활용될 수 있는 패턴들
Behavioral Pattern :
반복적으로 사용되는 객체들의 상호작용을 패턴화 해 놓은 것
보면 23개나 되는 양이라 책에 나오는 디자인 패턴만 정리
Adapter Pattern
한 클래스의 인터페이스를 클라이언트에서 사용하고자하는 다른 인터페이스로 변환한다.
어댑터를 이용하면 인터페이스 호환성 문제 때문에 같이 쓸 수 없는 클래스들을 연결해서 쓸 수 있다.
전기 콘센트를 보면 이해가 쉽다.
한국의 표준 플러그를 일본에 전원 소켓에 바로끼워줄수 없어 동그랑 모양을 일자로 바꿔주는 어댑터를 끼워주어야 한다.
이와같이 어댑터는 소켓의 인터페이스를 플러그에서 필요로 하는 인터페이스로 바꿔준다고 할 수 있다.
Prototype Pattern
원본 객체를 새로운 객체에 복사하여 필요에 따라 수정하는 메커니즘
Hash table을 이용해 객체를 저장하고 이를 Clone해서 사용한다.
위의 예시를 보면 UnderlinePen과 MessageBox를 모두 아우르는 interface Product를 이용해 객체를 Clone 하고 use하는것을 볼 수 있다.
Observer Pattern
한 객체의 상태에 변화가 일어나면, 해당 객체의 상태에 관심 있는 모든 다른 객체들에게 자동으로 변화가 발생한 사실을 알려줌.
Iterator Pattern
집합 클래스의 자료구조와 상관없이 집합에 소속된 요소들을 쉽게 접근하기 위하 여 반복자에게 위임
대규모 프로그램에는 서로 관련 있는 많은 클래스들이 많은데, 복 잡하게 얽혀 있는 것을 정리해서 간단한 또는 높은 레벨의 인터페 이스 (API)를 제공
![]() |
![]() |
왼쪽의 그림을을 오른쪽그림처럼 해결하는 것을 말한다.
Composite Pattern
틀(그릇)과 그 안의 내용물을 같은 종류로서 취급하면 편리한 경우
Proxy Pattern
Proxy = 대리인
시간이 많이 걸리는 heavy job을 수행하는 객체인스턴스의 생성 을 지연시키고자 할 때