열심히 끝까지

[10분 테코톡] 제리의 MVC 패턴 본문

디바이스 융합 자바(Java)기반 풀스택 개발자 양성과정(과제)

[10분 테코톡] 제리의 MVC 패턴

노유림 2022. 7. 7. 20:22

제리의 MVC 패턴
https://www.youtube.com/watch?v=ogaXW6KPc8I

-MVC 패턴이 생겨난 이유?
   > 과거를 생각해보자..
       : 과거에 프로그래머들이 수많은 프로그램들을 만듦
       : 프로그래머들이 코드가 많아지면 많아질수록 복잡
         >> 코드 파악 어려움
         >> 기능 수정 시 코드를 갈아 엎어야 하는 경우가 많음
      >>유지보수에 어려움을 겪음
       : 프로그래머들이 코드를 짜다보니
         >> "~ 구성이 편하다"라는 패턴이 탄생
              : 규칙성들이 조금씩 보이기 시작
              >> 패턴을 하나의 공식으로 만듦
    >> 논문으로 발표 
         + 많은 프로그래머들 사이에서 MVC 패턴이 유명화
  >> 결론
     - 코드에 대한 유지보수를 어떻게 하면 편하게 할 수 있을까를 
       고민하다가 탄생하게 된 패턴 중 하나
     - 유지보수가 편해지는 코드 구성 방식

- MVC패턴 전체구조 (웹에 비유하여 표현)
  
  1. 사용자 -> controller
     > 구글에 "코딩"이라고 검색 
  2. controller -> model
     > "코딩"에 대한 검색 결과 데이터를 달라고 요청
     model -> controller
     > 검색 결과 데이터 전송
  3. controller -> view
     > model한테 받은 검색 결과 데이터를 view로 전달
  4. view -> 사용자
     > 사용자가 보는 UI(레이아웃)에 검색 결과 데이터를 넣어서
        웹 페이지 보여주기

>> 기억해야 하는 것
    - model, view, controller의 역할
 - model
   : 데이터와 관련된 일을 하는 곳 
   : 데이터와 관련된 부분
 - view
   : 사용자한테 보여지는 부분을 담당
 - controller  
   : model과 view의 중개자 역할
   : model과 view를 이어주는 부분

    >> 내용을 들어서 알고 있지만 실전에서 적용을 못한다?
         > 죽어있는 이론이라고 생각됨
    >> 지금까지 설명한 내용만을 알고 있으면 
         MVC를 나도 모르게 어기면서 코딩을 하는 경우가 발생
         > 미션을 하면서 MVC를 잘 못 구현해서 피드백을 받는 경우 다수 발생
 
>> 깊은 이론적 지식을 다루는 것 보다는 
     실전에서 보다 어떻게 하면 MVC를 잘 지키면서 코딩할 수 있는 지설명

>> MVC를 지키면서 코딩하는 방법 - 5가지 규칙
   1. Model은 Controller와 View에 의존하지 않아야 함
     : Model내부에 Controller와 View에 관련된 코드가 있으면 안 됨
     : Model 클래스에서 컨트롤러와 뷰의 클래스를 import해서 사용하면 안 됨
       >> Model은 데이터와 관련된 부분 
            -> 언제든 깔끔하고 정제된 데이터를 꺼내 쓸 수 있게 
                 뷰나 컨트롤러에 코드를 섞어서 넣지 않고 데이터의 관련된 코드만
                 깔끔하게 모아두려는 것
     
   2. View는 Model에만 의존해야 하고, Controller에는 의존하면 안 됨.
     : View 내부에 Model의 코드만 있을 수 있고, Controller의 코드가 있으면 안 됨.
     : 

   3. View가 Model로부터 데이터를 받을 때, 사용자마다 다르게 보여주어야 하는
      데이터에 대해서만 받아야 함.
     : 배달의 민족 어플에서 주문하기 어플(예시)
     : 일관되게 똑같이 보여진 부분과 다르게 보여지는 부분이 다름
     : 모든 사용자에게 똑같이 보여지는 부분(View가 자체적으로 가지고 있는 부분)과
       사용자에게 따로 보여지는 부분(Model에게 받는 부분)으로 구성

   4. Controller는 Model과 View에 의존해도 됨.
     : Controller 내부에는 Model과 View의 코드가 있을 수 있음
     : Controller는 모델과 뷰의 중개자 역할 + 전체 로직을 구성하기 때문

   5. View가 Model로부터 데이터를 받을 때, Controller에서 받아야 함

 >> 자동차 경주 게임
  : 경주할 자동차 이름을 입력받음
  : 시도를 할 때마다 각 자동차를 랜덤으로 이동
  : 랜덤한 정도는 -로 표현
   6 : 50 보면서 다시 보면서 익힐 것
   >> 예시가 너무 적절
  " - "가 각 사용자에게  다르게 보여주어야 함으로 model이 아닌 view에서 표현