MVC Pattern

Updated:

MVC (Model View Controller)

MVC
  • MVC : Model - View - Controller , 소프트웨어 공학에서 사용되는 소프트웨어 디자인 패턴. - 이미지출처
  • 개인적으로 그동안 MVC패턴으로 개발을 해왔기에 크게 어려움은 없지만 규모가 커지면 그리 좋은 패턴은 아니라고 생각한다.



  • Model
    • data를 가지며, 사용되는 data와 그 data를 처리
    • View 또는 Control 에 관계없이 재사용이 가능
    • 여러개의 View를 가질 수 있음



  • View
    • 사용자가 보는 화면 - Android에서는 Activity, Fragment 등
    • 결과물을 생성하기 위해 Model로 부터 정보를 얻어옴



  • Controller
    • 입력 받은 것을 Model에 의해 View를 정의
    • Model의 상태 변화에 따라 View를 결정



보통 Web에 적용된 Model, View, Controller가 모두 분리된 MVC 패턴과 달리 안드로이드는 하나의 Class에서 모두 작성이 가능하다.

//Controll인 SetOnClickListener발생 -> View 에서 모두 처리

public class MainActivity extends AppCompatActivity{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
      
      	findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // data 갱신 요청
                // Model에 접근해서 최신 data를 받아옴
            }
        }); 
    }
}


MVC 패턴을 Android에서 순서로 나타내면

  1. Activity에서 Event 발생

  2. Model로 부터 data를 가져올지 확인
  3. View 갱신 여부 판단
  4. UI 갱신처리


  • 장점

    • 코드가 그리 길지 않다면 쉽게 구조 파악이 가능하다 - 보통 코드들은 다 길다
    • 개발기간이 짧아 질 수 있다 - 그냥 설계가 필요없이 작성하면 되니깐 - 그럼 아주 더러운 코드가 될 것이라 예상


  • 단점

    • 코드가 늘어가면 구조파악이 힘들다 - 아무리 함수로 분리하여도 파악이 힘들다.
    • 스파게티 코드 가능성이 높다. - 코드 분리가 아주 중요함.
    • 유지 보수 - 개인적인 프로젝트는 상관 없겠지만 다함께 작성하는 어느정도 규모가 있는 프로젝트라면 코드 양도 많고 구조도 복잡해 질 수 밖에 없고, 개개인이 이해하고 그것을 수정하는데 아주 큰 COST가 들것이라 생각한다.