본문 바로가기
개발 공부

[개발 공부.1] 앱 개발에서의 MVC패턴.

by MiaCoder 2024. 2. 13.

① 디자인 패턴

디자인 패턴이란 코드를 작성하는 규칙 또는 규약 같은 것입니다.

특정한 규칙이나 규악을 따라 코드를 작성하는 것입니다.

일종의 템플릿과 빗스한 역할을 한다고 이해하면 되겠습니다.

이런 방식을 사용하는 이유는 코드를 좀 더 이해하기 쉽고, 유지보수하기 쉬우며, 잠재적인 결함을 줄이기 위함입니다.

오늘 알아볼 MVC패턴은 디자인 패턴 중 한가지 입니다.

 

② MVC패턴

MVC패턴이란 Model, View, Controller로 구역을 나누어 코드를 작성하는 디자인 패턴이라고 설명할 수 있겠습니다.

앱이나 프로젝트를 만들 때 역할에 따라 코드들을 구분해 두는 것이라고 생각하면 이해하기 편하겠습니다.

 

출처: 위키피디아

 

일반적인 작동 방식을 간단하게 위 그림으로 이해해 보겠습니다.

 

③ 역할

Controller의 역할

사용자로 부터 내용을 입력받아 Model의 데이터 상태를 변화시키거나, View를 업데이트 한다. 이벤트 처리를 담당한다.

 

Model의 역할

데이터처리를 담당하고, 데이터 가공 등 각종 로직을 담당한다.

주로 데이터베이스와 연결되어 데이터베이스를 통해 데이터를 받아오기, 데이터를 꺼내오기, 데이터 상태를 변화시키디 등을 담당한다.

로직은 입력내용이 데이터베이스의 내용과 일치하는지 판단을 통해 로그인 기능 등을 구현하는 것을 의미한다.

 

View의 역할

데이터를 시각적으로 출력하는 역할을 한다. 사용자의 인터페이스를 담당한다.

 

 

1.유저가 Controller을 통해 어떤 행동을 한다.

2. Controller는 입력받은 내용을 바탕으로 Model을 업데이트 한다. 상황에 따라 View를 바로 업데이트 하기도 한다.

3. View은 Model의 업데이트된 내용을 바탕으로 출력을 담당한다.

 

가장 기본적인 MVC 패턴입니다.

 

 

하지만 대부분의 경우에는 Model이 View를 바로 업데이트하지 않고, Controller을 통해 업데이트 합니다.

출처: https://cloudstudying.kr/lectures/110

 

이런 식으로 

 

1. 사용자의 입력을 Controller이 받는다.

2. 입력을 Model에 요청하고 그에 따라 있는 데이터나 로직에 의해 처리된 데이터를 Controller이 받는다

3. Controller은 받은 데이터를 통해 View를 업데이트한다.

4. VIew는 업데이트된 값을 바탕으로 사용자에게 화면을 출력한다.

 

일반적인 MVC패턴이라고 할 수 있습니다.

 

 

④제약사항

 

이렇게 효율적으로 보이는 MVC패턴을 제대로 활용하기 위해서는 제약사항을 준수해야합니다.

 

 

1. Model의 제약사항 

 

사용자 입력을 처리할 모든 데이터를 가지고 있어야 한다.

 -> 사용자가 원하는 모든 정보를 가지고 있어, 입력받을 시 오류가 나지 않아야 한다는 으미.

 

View, Controller의 어떤 정보도 가지고 있지 않아야한다.

 -> View, Controller의 내부 속성을 가지는 등 역할을 침범해서는 안된다는 의미.

 

업데이트가 발생하면 업데이트 통지를 구현해야한다.

 -> 모델을 업데이트 하면 이를 처리할 수 있어야하고, 모델이 업데이트 되면 이를 누군가에게 알려야한다.

 

3. View의 제약사항

 

Model이 가지고 있는 정보를 저장해서는 안된다.

 ->출력만을 담당할 뿐, 데이터를 View안에 저장해서는 안된다.

 

Model, Controller이 가지고 있는 정보를 알아서는 안된다.

 ->화면을 출력하는 역할만을 담당할 뿐, Model, Controller의 정보를 참조하거나 내용이 들어있으면 안된다.

 

변경이 발생하면 변경 통지에 대한 처리를 해야한다.

 -> 화면에 출력되는 것이 바뀌면 이를 알려야한다.

 

3. Controller의 제약사항.

Model, View에 대해 알고 있어야한다.

 ->Model, View를 컨트롤하기 위해 해당 존재를 알아야한다.

 

Model, View의 변경을 모니터링 해야한다.

 -> 사용자 또는 어떤 이벤트로 인해 변경값이 생기면 이를 해석해서 Model, VIew에 통지해야 한다.