MVC패턴
JavaFX나 TornadoFX로 UI 요소는 MVC 혹은 MVVM패턴을 제공하고 있습니다. UI를 효과적으로 제어하기 위해 필요한 소프트웨어 아키텍처 패턴이며 다양한 모델이 있습니다. 여기서는 모델-뷰-컨트롤러로 이야기할 수 있는 MVC 패턴은 다음과 같은 역할을 합니다.
- Model: 모델은 데이터를 쉽게 조작하기 위한 구성요소로 컨트롤러와 뷰에서 사용한다
- View: 눈에 보여지는 UI의 로직을 담당하는 구성요소
- Controller: 모델과 뷰사이에 처리 로직을 담당하며 UI갱신 요청등을 처리할 수 있다
Model은 어플리케이션이 무엇을 할 것인지를 정의합니다. 내부 비지니스 로직을 처리하기 위한 역할을 할 것입니다. 예를 들어 데이터베이스나 데이터를 다루는 것입니다.
Controller는 모델이 어떻게 처리할 지를 알려주는 역할을 할 것이고, 모바일에서는 화면의 로직처리 부분입니다. View는 화면에 무엇인가를 보여주기 위한 역할을 합니다. 컨트롤러 하위에 종속되어, 모델이나 컨트롤러가 보여주려고 하는 모든 필요한 것들을 보여줄 것입니다. 그리고 사용자의 입력을 받아서 모델의 데이터를 업데이트를 합니다.
그리고 Controller는 Model과 View가 각각 무엇을 해야 할 지를 알고 있고, 통제합니다. 비지니스 로직을 처리하는 Model과 완전히 UI에 의존적인 View가 서로 직접 이야기할 수 없게 합니다.
MVC 패턴의 단점
MVC에서 View는 Controller에 연결되어 화면을 구성하는 단위 요소이므로 다수의 View들을 가질 수 있습니다. 그리고 Model은 Controller를 통해서 View와 연결되지만, 이렇게 Controller를 통해서 하나의 View에 연결될 수 있는 Model도 여러 개가 될 수 있습니다. 뷰와 모델이 서로 의존성을 띄게 되는 것입니다.
즉, 화면에 복잡한 화면과 데이터의 구성 필요한 구성이라면, Controller에 다수의 Model과 View가 복잡하게 연결되어 있는 상황이 생길 수 있습니다.
MVVM 패턴
MVVM 패턴은 Model + View + View Model를 합친 용어입니다. Model과 View은 다른 패턴과 동일합니다.
여기서 새롭게 등장한 View Model은 View를 표현하기 위해 만들어진 View를 위한 Model이라고 할 수 있습니다. View보다는 Model과 유사하게 디자인됩니다. MVVM은 두가지 디자인 패턴을 사용합니다. 바로 Command패턴과 Data Binding 을 사용하면서 View와 ViewModel은 의존성을 제거했습니다. 바인딩 기법은 ViewModel의 속성과 특정 View의 속성을 Binding 시켜 줌으로써 ViewModel 속성이 변경 될때마다 View를 업데이트 시켜줄 수 있습니다.
이러한 패턴들에 익숙해지려면 잘 설계된 많은 소스를 참조하는 수밖에 없습니다. 무엇이든 완벽한 패턴은 없습니다. 각 설계하려고 하는 자신의 소프트웨어의 규모에 맞춰서 패턴이 선택되어야 합니다. 또는 안드로이드 아키텍처처럼 잘 준비된 라이브러리를 이용해도 좋습니다. 이 부분은 여러분들이 직접 탐구해보세요!
comment