MVC Pattern
Updated:
MVC (Model View Controller)
- 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에서 순서로 나타내면
-
Activity에서 Event 발생
- Model로 부터 data를 가져올지 확인
- View 갱신 여부 판단
- UI 갱신처리
-
장점
- 코드가 그리 길지 않다면 쉽게 구조 파악이 가능하다 - 보통 코드들은 다 길다
- 개발기간이 짧아 질 수 있다 - 그냥 설계가 필요없이 작성하면 되니깐 - 그럼 아주 더러운 코드가 될 것이라 예상
-
단점
- 코드가 늘어가면 구조파악이 힘들다 - 아무리 함수로 분리하여도 파악이 힘들다.
- 스파게티 코드 가능성이 높다. - 코드 분리가 아주 중요함.
- 유지 보수 - 개인적인 프로젝트는 상관 없겠지만 다함께 작성하는 어느정도 규모가 있는 프로젝트라면 코드 양도 많고 구조도 복잡해 질 수 밖에 없고, 개개인이 이해하고 그것을 수정하는데 아주 큰 COST가 들것이라 생각한다.