ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • MVVM 패턴 기본 이해 1 - 기본 지식, 독립성
    Etc. 2019. 6. 17. 11:06

    MVVM패턴을 이용해 WPF앱을 개발하려 하는데 MVVM에 대해 쉽게 다가오지 않아

    글을 쓰면서 정리하려고 합니다.

     

     

     

    먼저 디자인 패턴에 대해 알아야하는데, 위키를 보면 다음과 같습니다.

     

    소프트웨어 공학에서 특정 문맥에서 공통적으로 발생하는 문제에 대해 재사용 가능한 해결책이다.

     

    공통적으로 발생하는 문제에 대해 재사용 가능한 해결책 이라고 합니다.

     

    그리고 제가 소프트웨어 공학시간에 배웠던 내용은 다음과 같았습니다.

     

    비슷한 분야의 프로그램들은 공통적으로 요구하는 점들이 있었고,

    이런 공통적인 점들을 처리하기 위해 비슷한 코드들이 생겼고,

    그런 코드들이 일정한 구조(Pattern)를 갖추고 있더라.

    그래서 그런 구조를 명시적으로 표현하여

    소프트웨어를 설계(Design)할 때 계속하여 재사용할 수 있게 한 것이

    디자인 패턴 이라고 합니다.

     

     

    결과적으로 일정한 구조를 갖춘 소프트웨어 설계를 하게 되고,

    이에 따라 공통적으로 요구하는 사항들을 보다 편리하게 개발할 수 있게 되었습니다.

     

    이런 디자인 패턴에는 여러 종류가 있는데, 그 중 이 글에서 정리하려는 패턴이

    MVVM 패턴 입니다.

     

    우리가 기존에 알던 것과 비교하면서 정리하면 오히려 나중에 헷갈릴 것 같아서

    기존 디자인 패턴은 아무것도 모른다고 가정하고 정리하려 합니다.

     

    MVVM은 Model, View, ViewModel 의 줄임말로 2005년에 정립되었습니다.

     

    Model은 Data,

    View는 사용자가 접근할 수 있는 GUI,

    ViewModel은 View와 Model을 연결시켜주는 중간자 역할입니다.

     

    그리고 MVVM에서 중요한 점은 View와 ViewModel이 서로 독립적이어야 한다는 점입니다.

     

    독립적이라는 말에 대해 이해하기 전에

    MVVM에서 각 세 부분은 서로 어떤 역할을 하는지 살짝 알아야 합니다.

     

    MVVM에 대해 검색해 보시면 위와 같은 그림을 보실 수 있습니다.

    위 그림에서 보면 View와 ViewModel이 서로 연결되고, ViewModel과 Model이 연결됩니다.

        연결 : 무언가(ex. data)를 주고 받음.

    그런데 독립적이라 함은 서로 연결되는게 없어야 한다는 뜻이 아닐까? 라는 생각이 듭니다.

     

    여기서 독립적이라 함은 "Isolate" "격리시키다" 의 의미로 생각하시는 것이 편합니다.

    "서로 격리시켜도 각자의 역할을 잘 한다"라는 의미입니다.

     

    예를 들어

    어떤 A라는 프로그램에서 View를 갖고와서 B라는 프로그램에서 써본다고 합시다.

     

    그럼 이 프로그램은

    Model.B View.A ViewModel.B 의 구조를 갖게됩니다.

     

    이때 View와 ViewModel에서 사용하는 속성들의 이름 관련한 문제가 없이

    프로그램이 잘 돌아간다면

    View.A는 프로그램 A에서 ViewModel과 독립적이였고,

    ViewModel.B는 프로그램 B에서 View.B와 독립적이였다고 할 수 있습니다.

     

    다시 설명하자면, 위와 같은 그림에서 표현되는 것처럼 서로 연결되지만,

    서로 다른 프로그램에서 View, ViewModel을 갖고와서 써도 문제가 안생긴다면

    "독립적이다" 라고 말할 수 있는 것입니다.

     

     

    부가설명.

    새로운 프로그램을 개발할 때 내가 개발했던 다른 프로그램의 View를 갖고와서

    사용하더라도 문제가 없이 사용할 수 있다면, 이 View는 독립적인 것입니다.

    댓글

GiGong