본문 바로가기
🥝CS

[ComputerScience]디자인패턴 // MVC 패턴 - 모델,뷰,컨트롤러 패턴 외 패턴

by 김말자 2022. 8. 10.
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하여 업데이트하는 부분이 구현되어야함

코코도르 디퓨저 200ml x 2p, 에이프릴 프레쉬Apple 2022 맥북 에어, 스타라이트, M2 8코어, GPU 8코어, 256GB, 8GB, 30W, 영문라온 LG그램 맥북 노트북 슬리브파우치, 오트밀카키노트북파우치 맥북가방 13인치 15인치 17인치퍼니메이드 캔버스 노트북 파우치 + 가죽 마우스패드, 인디블루(파우치)로마네 브런치브라더 바게트베어 EVA 하드 노트북 파우치 13형끼움 맥북 노트북 슬림 가죽 슬리브 포트폴리오 파우치, 스카이블루

순서

  1. 액션을 컨트롤러에 들어오면 그걸 확인해서 모델을 업데이트함
  2. 그 후 컨트롤러는 모델을 나타내줄 뷰를 선택하고 그 뷰가 모델을 이용해 화면을 나타냄

 

MVP패턴 - 모델, 뷰, 프리젠터 패턴

  • mvc패턴에서 컨트롤러 부분이 프리젠터로 교체된 패턴
  • 뷰와 프레젠터는 일대일 관계이기 떄메 더 강한 결합을 지닌 패턴
  • 뷰와 모델의 의존성이 없음
  • 대신 뷰와 프레젠터사이의 의존성이 높아짐

presenter 

뷰에서 요청한 정보를 모델을 가공하여 뷰에게 전달해 주는 부분

순서

  1. 액션이 뷰를 통해 들어오면 뷰가 프래젠터에 요청해 프레젠터는 모델에게 데이터를 요청함
  2. 그러면 모델은 프레젠터에게 데이터를 응답하고 그 데이터를 프레젠터는 뷰에게 데이터를 응답함
  3. 그럼 그화면이 뷰에 보이는 것임

 

MVVM패턴(모델 뷰 뷰모델)패턴

컨트롤러 부분이 뷰모델로 바뀐 패턴임

뷰모델(View Model)

  • 뷰를 더 추상화 한 개층
  • 커맨드와 데이터 바인딩을 가지는 게 특징
  • 뷰와 뷰모델 사이에 양방향 데이터바인딩을 지원
  • ui의 별도의 코드 수정 없이 재사용할 수 있고, 단위 테스팅하기 쉽다는 장점이 있음

*커맨드 - 여러가지 요소 처리를 하나의 액션으로 처리할 수 있게함

*데이터바인딩 - 화면에 보이는 db와 웹브라우저의 메모리테이터를 일치시킴(뷰모델 변경시 뷰도 같이 변경됨)

순서

  1. 액션은 뷰를 통해 들어오고 그걸 commend패턴으로 모델뷰에 액션을 전달ㄹ하면 모델뷰는 모델에게 데이터요청
  2. 모델은 모델뷰에 데이터응답, 모델뷰는 응답받은 데이터를 가공해 저장후 데이터바인딩해 화면에 나타냄

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

728x90
반응형
BIG

댓글