비즈니스 로직
비즈니스 로직(Business logic)은 컴퓨터 프로그램에서 실세계의 규칙에 따라 데이터를 생성·표시·저장·변경하는 부분을 일컫는다. 이 용어는 특히 데이터베이스, 표시장치 등 프로그램의 다른 부분과 대조되는 개념으로 쓰인다.위키백과
Model은 데이터를 포함하는 앱의 도메인 모델로 생각할 수 있다. 쉽게 말해서 모델은 앱에서 사용할 데이터에 관련된 행위와 데이터를 다룬다.
Model은 View, ViewModel 계층을 전혀 신경쓰지 않아도 된다. 데이터를 어떻게 가지고 있을지만 생각하면 되고, 그 이상의 비즈니스 로직이나 어떻게 보여주는지에 굳이 맞출 필요는 없다.
View는 앱의 UI에 대한 코드를 담고 있다. 각 컴포넌트에 대한 정보를 담고, 어느 위치에 어떻게 배치될지 작성되어있다. 디자인적인 요소도 있지만, ViewModel로부터 데이터를 가져와 어떻게 배치할지, 특정 상황에 따라 ViewModel의 어떤 메서드를 이용할지에 대해서도 가지고 있다.
재사용성이 강조되며 Model을 직접 소유하지 않아야 한다. ViewModel로부터 받아와서 View에 정보를 집어넣어주는 방식이 일반적이다.
MVVM의 뷰 모델은 값 변환기인데, 이는 뷰 모델이 모델에 있는 데이터 객체를 노출(반환)하는 책임을 지기 때문에 객체를 관리하고 표현하기가 쉬워진다는 것을 의미한다. 이와 같은 이유로 뷰 모델은 뷰 보다는 모델에 가깝다.
모든 뷰들의 디스플레이 로직을 제외한 대부분의 것들을 처리하며 앱의 핵심적인 비즈니스 로직을 담고있고 MVC패턴의 Controller와 비슷한 역할을 한다.
ViewModel은 기본적으로 View에 종속되지 않는다.
Command 패턴
- 요청을 객체의 형태로 캡슐화하여(실행될 기능을 캡슐화함으로써) 사용자가 보낸 요청을 나중에 이용할 수 있도록 매서드 이름, 매개변수 등 요청에 필요한 정보를 저장 또는 로깅, 취소할 수 있게 하는 패턴이다.
- 커맨드 패턴에는 명령(command), 수신자(receiver), 발동자(invoker), 클라이언트(client)의 네개의 용어가 항상 따른다. 출처
MVVM 패턴은 Model, View, ViewModel로 구성되어 있습니다.
Model은 앱에서 사용할 데이터에 관련된 행위와 데이터를 다루고, View는 ViewModel로부터 데이터를 가져와 어떻게 배치할지, 특정 상황에 따라 ViewModel의 어떤 메서드를 이용할지에 대해서 다룹니다.
ViewModel은 모든 뷰들의 디스플레이 로직을 제외한 대부분의 것들을 처리하는 앱의 핵심적인 비즈니스 로직을 담고 있습니다.
장점은 Model과 View, View와 ViewModel 사이의 의존성이 없기에 독립성으로 인한 유닛 테스트 및 모듈화 개발을 할 수 있고 유지보수 비용이 적습니다.
단점은 MVVM패턴이 개발 속도 향상이 목적이 아닌 유지보수의 비용 감소에 있어 설계에 어려움이 있고, 단순한 UI 작업에서는 오히려 하는 일에 비해 많은 코드를 작성해야 한다는 단점이 있습니다.
패턴들을 공부하다보니 비즈니스 로직과 Command 패턴에 대해 나오는데 나중에 자세히 살펴보고 넘어가야겠다.
참고하자
비즈니스 로직: https://mommoo.tistory.com/67
Command 패턴: https://k0102575.github.io/articles/2020-02/command-pattern
https://ko.wikipedia.org/wiki/%EB%AA%A8%EB%8D%B8-%EB%B7%B0-%EB%B7%B0%EB%AA%A8%EB%8D%B8
https://velog.io/@k7120792/Model-View-ViewModel-Pattern
https://medium.com/hcleedev/ios-swiftui%EC%9D%98-mvvm-%ED%8C%A8%ED%84%B4%EA%B3%BC-mvc%EC%99%80%EC%9D%98-%EB%B9%84%EA%B5%90-8662c96353cc
https://blog.crazzero.com/m/152
https://appboong.tistory.com/15
https://scshim.tistory.com/407
https://k0102575.github.io/articles/2020-02/command-pattern
https://kaki104.tistory.com/531