티스토리 뷰

JAVA

어떻게 협력하는가? (with MVC)

김남김 2023. 10. 14. 17:07

 

 

어떻게 협력을 생각하고 객체를 나눌 수 있을까?

결론부터 말하자면, 책임과 협력 관계를 통해 객체를 나눠 볼 수 있다.

MVC 패턴을 통해 협력의 구조를 살펴보고 생각해보자.

 

 

https://developer.mozilla.org/ko/docs/Glossary/MVC 에서 제공하는 MVC 에 대한 참고사진

 

 

MVC 패턴이란 무엇일까? 

MVC(모델-뷰-컨트롤러) 패턴은 소프트웨어 디자인 및 개발 패턴 중 하나로,

객체지향적인 프로그래밍을 위해 설계하는 과정에서 역할분담을 할 때 가이드라인을 제시하는 방법 중 하나다.

사용자가 보는 UI를 담당하는 View 

데이터를 정의하고 가공하는 Model 

입력에 대해 어떤 것을 수행할 것인지 로직을 포함하는 Controll로  구성된다.

 

더 자세히 설명하면 아래와 같다. 

모델

모델은 앱이 포함해야할 데이터가 무엇인지를 정의한다.

 데이터의 상태가 변경되면, 모델을 일반적으로 뷰에게 알리는 협력을 하며 가끔 컨트롤러에게 알리기도 한다. 

 

뷰는 앱의 데이터를 보여주는 방식을 정의한다. 

사용자가 넣는 입력이나 사용자가 봐야하는 애플리케이션의 출력을 담당하는데 해당 데이터를 모델로부터 받는 협력을 한다. 

 

컨트롤러

컨트롤러는 애플리케이션의 사용자로부터의 입력에 대한 응답으로 모델 및/또는 뷰를 업데이트하는 로직을 포함한다. 

 


 

너무 어렵게 생각하지 않고,

개념의 본질을 이해하여 적용하는데 집중하면된다. 

 

사용자에게 어떤 정보를 보여줄것인가?

입력을 어떻게 받고, 어떤 기능으로 스케쥴링 할 것인가?

기능을 어떻게 동작할 것인가? 

 

크게 세 영역으로 분리하여 객체에 책임을 부여하고 협력하면 된다는 의미로 김남김은 이해했다.

 

그럼 이전 포스트와 다르게 객체를 분리하고 책임을 부여하고

어떻게 협력할 것인가에 대해서는 MVC 패턴을 따라 요구사항에 맞게 기능하도록 설계해보자.

 

MVC를 따라 객체들을 분리하고 협력관계를 생각한다면 model view controller로 나눠본다.


model 
랜덤 값의 생성 및 소유: Computer
유저 입력값과 스트라이크/볼 수의 소유: User
랜덤 값과 유저 입력값의 비교: BaseballService
입력에 대한 예외 처리: InputException


view 
입력과 출력을 전달: Input, Output


Controller 
사용자 입력에 따라 어떤 로직을 수행: BaseballController
입력을 검증하고 예외를 처리: InputValidator


----------------
객체 간의 의존성을 관리 Configure

 

위와 같이 객체가 MVC로 분리된다면 어떻게 협력하게 될까? 

바로 위에서 봤던 그림과 같이 협력하게된다. 

 

재소환!

1. 사용자가 입력하게되면 View로써 만들어지고 

2. 이 View가 Controller 에 들어가면, Validater에서 검증을 수행한다.

 

3. 검증된 View는 Controller를 통해 적절한 Model의 기능이 수행된다.

 

4. Model의 기능 수행이 완료되면 결과가 View로써 만들어진다. 

 

5. 만들어진 View는 사용자에게 출력되게 된다. 

 

어떤가 객체간의 협력관계가 명확하지 않은가? 

이전 포스트에서 객체를 나눴을 때 협력관계를 고려하기 힘들지 않았는가?

 

MVC패턴을 통해 이전보다 명확하게 객체간의 협력 관계를 고려해볼 수 있었다.

이제는 MVC 패턴을 이해했고 적용해 봤으니, 

다음 포스트에서 테스트 코드에 대해 고민하며 TDD를 통해 객체의 속성과 기능을 구현해보자 

 

 

'JAVA' 카테고리의 다른 글

모든 객체의 공통 메서드  (1) 2023.12.02
객체의 생성과 파괴  (2) 2023.12.02
자바 습관(올바른 문자열 처리)  (0) 2023.11.29
자바 습관 (기본 프로그래밍)  (0) 2023.11.28
Java 코딩 컨벤션  (1) 2023.10.13
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함