GUI Architecture Pattern

[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의 장점
          • 도메인과 프레젠테이션을 분리하면, 기본적으로 둘은 성격이 다르기 때문에, 성격이 다른 작업을 분리하는 행위 자체가 코드의 이해를 쉽게 함

 

[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 

 

 

 

 

[Section 4] MVVM