728x90
728x90
BIG
MVC패턴 - 모델, 뷰, 컨트롤러(model-view-controller, MVC)패턴
- 사용자 인터페이스로부터 비즈니스 로직을 분리해 어플리케이션의 시각적요소나 그 이면에 실행되는 비즈니스 로직을 서로 영향없이 쉽게 고칠수 있는 애플리케셔션을 만들 수 있음
- 재사용성과 확장성이 용이함
- 애플리케이션이 복잡해질수록 모델과 뷰의 관계가 복잡해짐
모델(model)
- 애플리케이션의 정보(db) - 데이터베이스, 상수 변수 등
- 어떠한 동작을 수행하는 코드
- 표시형식에 의존하지 않음(사용자한테 어떻게 보일지 신경안써도됨)
- public함수로만 이루어짐
- 몇몇 함수들은 사용자에게 query(질의)에 대해 상태 정보를 제공하고 나머지는 수정함
- 상태에 변화가 있을때 컨트롤러와 뷰에 통보
뷰(view)
- 텍스트, 체크박스 항목 등과 같은 사용자 인터페이스요소
- 모델을 기반으로 사용자가 볼수있는 화면
- 모델이 가지고 있는 정보를 따로 저장하면 안됨
- 시각적인 정보만 오로지 가지고 있어야됨
- 사용자가 볼 결과물, 모델로부터 정보를 얻어옴
- 모델을 컨트롤러부터 받아와 사용자에게 보여줌
- 여기서 변경이 일어나면 반드시 컨트롤러에 이를 전달해 줘야함
컨트롤러(controller)
- 하나이상의 모델과 하나이상의 뷰를 잇는 다리역할이며 메인로직을 담당
- 모델, 뷰 등의 생명주기관리
- 모델이나 뷰의 변경이 있으면 이를 해석해 각각 구성요소에 해당내용을 알려줘야됨
- 데이터와 비즈니스 로직사이의 상호동작을 관리
- 모델에 명령을 보냄 -> 모델의 상태변경
- 자바에서는 java.util.Observable을 상속(extends)받아야함
- 그리고 모델에는 현재의 상태를 변경(mutator)하거나 다른 클래스에 알릴 수 있는 함수가 있어야함
- nutator는 setChanged()와 notifyObservers()호출
- 그러면 노티파이옵저버는 모델에 등록된 모든 뷰에게 업데이트메세지를 보냄
- 그럼 뷰는 java.util.Observer를 임플리먼츠해 만들면 업데이트메소드를 구현할 수 있음
- 뷰는 반드시 모델에게 query하여 업데이트하는 부분이 구현되어야함
순서
- 액션을 컨트롤러에 들어오면 그걸 확인해서 모델을 업데이트함
- 그 후 컨트롤러는 모델을 나타내줄 뷰를 선택하고 그 뷰가 모델을 이용해 화면을 나타냄
MVP패턴 - 모델, 뷰, 프리젠터 패턴
- mvc패턴에서 컨트롤러 부분이 프리젠터로 교체된 패턴
- 뷰와 프레젠터는 일대일 관계이기 떄메 더 강한 결합을 지닌 패턴
- 뷰와 모델의 의존성이 없음
- 대신 뷰와 프레젠터사이의 의존성이 높아짐
presenter
뷰에서 요청한 정보를 모델을 가공하여 뷰에게 전달해 주는 부분
순서
- 액션이 뷰를 통해 들어오면 뷰가 프래젠터에 요청해 프레젠터는 모델에게 데이터를 요청함
- 그러면 모델은 프레젠터에게 데이터를 응답하고 그 데이터를 프레젠터는 뷰에게 데이터를 응답함
- 그럼 그화면이 뷰에 보이는 것임
MVVM패턴(모델 뷰 뷰모델)패턴
컨트롤러 부분이 뷰모델로 바뀐 패턴임
뷰모델(View Model)
- 뷰를 더 추상화 한 개층
- 커맨드와 데이터 바인딩을 가지는 게 특징
- 뷰와 뷰모델 사이에 양방향 데이터바인딩을 지원
- ui의 별도의 코드 수정 없이 재사용할 수 있고, 단위 테스팅하기 쉽다는 장점이 있음
*커맨드 - 여러가지 요소 처리를 하나의 액션으로 처리할 수 있게함
*데이터바인딩 - 화면에 보이는 db와 웹브라우저의 메모리테이터를 일치시킴(뷰모델 변경시 뷰도 같이 변경됨)
순서
- 액션은 뷰를 통해 들어오고 그걸 commend패턴으로 모델뷰에 액션을 전달ㄹ하면 모델뷰는 모델에게 데이터요청
- 모델은 모델뷰에 데이터응답, 모델뷰는 응답받은 데이터를 가공해 저장후 데이터바인딩해 화면에 나타냄
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
728x90
반응형
BIG
'🥝CS' 카테고리의 다른 글
[Computer Science]네트워크(Network) (0) | 2022.08.11 |
---|---|
[Computer Science] 프로그래밍 패러다임 (0) | 2022.08.10 |
[ComputerScience]디자인패턴 // 프록시패턴과 프록시서버 (0) | 2022.08.10 |
[ComputerScience]디자인패턴 // 전략패턴과 옵저버패턴 (0) | 2022.08.10 |
[ComputerScience]디자인패턴 // 팩토리패턴 (0) | 2022.08.10 |
댓글