[Section 1] 아키텍쳐 패턴이란
아키텍처 - 관심사의 분리와 아키텍처
- 관심사의 분리
- 복잡한 문제를 더 작은 문제들로 나누고 한 번에 한 가지 문제에 집중하여 해결
- 애플리케이션은 렌더링, 데이터 가공, 네트워크 통신, 상태 관리 등 성격이 다른 여러 문제들로 구성됨
- 세부적인 특성에 따라 구획을 나누고 한번에 한가지 문제만 해결하는게 효율적
- 아키텍쳐
- 소프트웨어의 개략적인 계층 분리 방법
- 개발 환경, 팀 규모, 비즈니스 로직 크기, 테스트 코드 작성 여부 등에 따라 적합한 아키텍쳐가 달라짐
패턴 - 크리스토퍼 알렉산더 『영원의 건축(The Timeless Way of Building)』, 『패턴 랭귀지(A Pattern Language)』
- 크리스토퍼 알렉산더
- 건축가이지만 소프트웨어 개발에 큰 영향을 미친 학자
- 무명의특성
- 명확하게 설명할 수 없지만 보편적으로 아름답다고 느끼는 요소들
- 이런 특성을 파악하는 능력은 인간의 본성
- 무명의 특성에 도달하기 위해서는 관문 역할을 하는 패턴 언어가 필요
- 패턴
- 건축에 자주 사용되는 253가지 패턴을 발견
- 253가지 패턴들이 서로 복잡하게 연결되어 사용자가 어떤 패턴들을 선택하는지에 따라 다양한 형태를 만들게 되며, 네트워크 구조가 잘 형성되었을 때 건물의 질 또한 좋아질 수 있다.
아키텍처 패턴
- 아키텍쳐 패턴
- 패턴은 반복적으로 나타나는 문제들에 대한 해결책
- 반복적으로 나타나는 문제들 (패턴)
- 뷰를 구축하는 공간(계층, 이하 공간으로 서술)
- 프레젠테이션 로직(뷰의 상태와 로직)을 작성하는 공간
- 여러 개체들 사이에서 중개자(Mediator) 역할을 하는 공간
- 화면을 이동하는 로직을 작성하는 공간
- 상태를 동기화 하는 방법
- 완전히 새로운 아키텍쳐는 없다 (MVC, MVVM 등 모델, 뷰를 포함하는 등 비슷비슷 함)
- 즉, 아키텍쳐란 반복적으로 나타나는 해결책들의 조합으로 구성된 아키텍쳐 구성이다.
- 두 종류의 아키텍쳐
- GUI
- 유저와 상호작용할 수 있는 전자적인 인터페이스를 제공하는 애플리케이션
- GUI 아키텍쳐
- GUI Application의 계층분리 방법
- MVC, MVP, MVVM, Flux 등
- 대부분의 GUI 아키텍쳐는 Model과 View를 포함하고 있다
- 모델과 뷰는 그만큼 중요한 계층
- 그럼 모델, 뷰는 무엇일까?
- PDS (Presentation Domain Seperation)
- Presentation
- View에 해당하는 계층
- UI의 배치, 상태, 이벤트 처리 로직을 다루는 계층
- 입력(키보드, 마우스, 터치스크린 등에서 오는 신호를 처리)과 출력(렌더링)
- Domain
- Model
- 시스템 본래의 관심사항
- PDS는 시스템 본래의 관심사항(Domain)을 UI(Presentation)로부터 분리시킨다
- PDS의 장점
- 도메인과 프레젠테이션을 분리하면, 기본적으로 둘은 성격이 다르기 때문에, 성격이 다른 작업을 분리하는 행위 자체가 코드의 이해를 쉽게 함
- Presentation
- GUI
[Section 2] MVC
Smalltalk MVC
1970년대의 UI 개발
MVC의 본질
구성
A Variety of MVC
저게 MVC라고?
JSP Model 2
Cocoa MVC(Passive View)
Presentation Model(Application Model)
도식적, 진보적 사고관에서 벗어나기
Massive ViewController?
You don't know MVC
[Section3] MVP
세 가지 형태의 MVP
Taligent MVP
MVC를 일반화, 세분화 하기
원대한 목표, 그러나
Supervising Controller
Twisting the Triad
특징 정리
두 가지 동기화 방법 - Flow Synchronization, Observer Synchronization
Passive View
옵저버 동기화를 포기한 뷰
보다 테스터블한 코드를 향해
Supervising Controller vs Passive View
Passive View - Template