MVC
MVC는 Model, View, Controller의 약자이다. 하나의 프로젝트를 구성할 때 그 구성요소를 세 가지의 역할로 구분한 패턴을 말한다.
위의 그림처럼 사용자가 Controller를 조작하면 Controller는 Model을 통해서 데이터를 가져오고 그 정보를 바탕으로 시각적인 표현을 담당하는 View를 제어해서 사용자에게 전달하게 된다.
모델, Model
애플리케이션의 정보, 데이터를 나타낸다. Model이 가지고 있는 규칙은 다음과 같다.
- 사용자가 편집하길 원하는 모든 데이터를 가지고 있어야 한다.
- 화면안에 글자가 표현된다면, 글자의 위치 정보, 글자 내용, 글자의 포맷 정보 등을 가지고 있어야 한다.
- View나 Controller에 대해서 어떤 정보도 알지 않아야 한다.
- 데이터 변경이 일어났을 때 모델에서 화면 UI를 직접 조정해서 수정할 수 있도록 View를 참조하는 내부 속성값을 가지면 안 된다.
- 변경이 일어나면, 변경 통지에 대한 처리방법을 구현해야만 한다.
- 텍스트 정보가 변경이 된다면, 이벤트를 발생시켜 누군가에게 전달해야 하며, 누군가 Model을 변경하도록 요청하는 이벤트를 보냈을 때 이를 수신할 수 있는 처리방법을 구현해야 한다.
- Model은 재사용가능해야 하며 다른 인터페이스에서도 변하지 않아야 한다.
뷰, View
input 텍스트, 체크박스 항목 등과 같은 사용자 인터페이스 요소를 나타낸다.
데이터 및 객체의 입력, 그리고 보여주는 출력을 담당한다. View에서는 다음과 같은 규칙들이 있다.
- Model이 가지고 있는 정보를 따로 저장해서는 안된다.
- 화면에 글자를 표시하기 위해, Model이 가지고 있는 정보를 전달받게 될 텐데, 그 정보를 유지하기 위해서 임의의 View 내부에 저장하면 안 된다.
- 화면에 글자를 표시하라는 명령을 받으면 표시하기만 하고 표시할 때 필요한 정보들은 저장하지 않아야 한다.
- Model이나 Controller와 같이 다른 구성요소들을 몰라야 한다.
- View는 데이터를 받으면 화면에 표시해 주는 역할만 가지면 된다.
- 변경이 일어나면 변경통지에 대한 처리방법을 구현해야만 한다.
- View에서는 화면에서 사용자가 화면에 표시된 내용을 변경하게 되면 이를 Model에게 전달해서 Model을 변경해야 할 것이며 그 작업을 하기 위해 변경 통지를 구현해야 한다.
- 재사용이 가능하게끔 설계를 해야 하며 다른 정보들을 표현할 때 쉽게 설계를 해야 한다.
컨트롤러, Controller
데이터와 사용자 인터페이스 요소들을 잇는 다리역할을 한다.
사용자가 데이터를 클릭하고, 수정하는 것에 대한 "이벤트"들을 처리하는 부분을 뜻한다. 다음과 같은 규칙이 있다.
- Model이나 View에 대해서 알고 있어야 한다.
- Model이나 View는 서로의 존재를 모르고, 변경을 외부로 알리고, 수신하는 방법만 가지고 있는데 이를 Controller가 중재하기 위해 Model과 그에 관련된 View에 대해서 알고 있어야 한다.
- Model이나 View의 변경을 모니터링해야 한다.
- Model이나 View의 변경 통지를 받으면 이를 해석해서 각각의 구성 요소에게 통지를 해야 한다.
- 애플리케이션의 메인 로직은 Controller가 담당하게 된다.
왜 MVC패턴인가
각각의 구성들이 맡은 바에만 집중을 해서 처리를 할 수 있게 되므로 효율적이다.
서로 분리되어 각자의 역할에 집중할 수 있게 하여 개발을 하고 애플리케이션을 만든다면, 유지보수성, 확장성, 유연성이 증가하고, 중복코딩의 문제점 또한 사라지게 된다.
참고
https://m.blog.naver.com/jhc9639/220967034588
항해 개발자 취업 리부트 코스를 수강하고 작성한 콘텐츠 입니다.
IT 커리어 성장 코스 항해99, 첫 취업부터 현직자 코스까지
항해99는 실무에 집중합니다. 최단기간에 개발자/PM으로 취업하고, 현직자 코스로 폭발 성장을 이어가세요. 실전 프로젝트, 포트폴리오 멘토링, 모의 면접까지.
hanghae99.spartacodingclub.kr
'멋진 개발자 > Java & Spring' 카테고리의 다른 글
[항해 취업코스] 개발자 취준 기록 15 - Spring Security의 구조와 JWT 발급 과정 (0) | 2024.03.12 |
---|---|
[항해 취업코스] 개발자 취준 기록 14 - Annotation (0) | 2024.03.10 |
[항해 취업코스] 개발자 취준 기록 12 - DI와 IoC (0) | 2024.03.07 |
[항해 취업코스] 개발자 취준 기록 11 - Java Map 내부 구현 파악 (1) | 2024.03.07 |
[항해 취업코스] 개발자 취준 기록 10 - Garbage Collector (0) | 2024.03.07 |