Android (안드로이드)

[Android] 디자인 패턴 - MVC 패턴 / 예제

Oscar:) 2024. 2. 14. 12:49

 

 

디자인 패턴 중 MVC 패턴에 대해 알아보자.

 

안드로이드에서 적용하는 MVC 패턴이다.

 

 

 


 

디자인 패턴이란?

 

 

소프트웨어의 개발 방식을 문서로 공식화 한 것.

 

개발 중 자주 나타나는 과제를 해결하기 위한 방법 중 하나로,

개발 과정에서의 불편한 점을 보완하는 등의 설계 노하우를 축적하여

이름을 붙인 형태로 정리한 것이다.

 

 

 

✅ 디자인 패턴을 사용하면?

 

선배 개발자들의 설계 노하우를 축적하였기에 대부분의 디자인 패턴은

재사용이 용이한 형태로 정리되어 있다.

 

그렇기에 추후 유지·보수가 편리한 것은 물론이고,

코드 가독성도 향상된다고 볼 수 있다.

 

또한, 일정한 개발 규칙을 정한 것이기에 협업도 편리해진다.

 

 

 

✅ 안드로이드에서의 디자인 패턴을 구분하는 기준

 

디자인 패턴은 대부분 재사용이 용이한 형태로 정리되었고,

코드의 관심사를 분리하는 방향으로 자리 잡았다.

 

View와 Model을 분리하는 것을 시작으로

그 관계를 어떻게 해결하는지에 대한 방식이 기준이 되었다.

 

 

 


 

MVC 패턴

 

 

사용자에게 보여지는 화면과 비즈니스 로직을 구분하는데 중점을 둔 디자인 패턴이다.

 

쉽게 말해 View와 Logic을 구분한다는 것이다.

 

 

Logic을 담당하는 부분을 Model이라 부르고,

Model + View + Controller 의 약어로 MVC라 칭한다.

 

 

 

 

 

✅ Model

 

- 데이터와 비즈니스 로직을 주로 관리한다.

- Controller에게 명령을 전달 받고 데이터의 상태를 변경시킨다.

- 데이터의 상태가 변경되면 뷰에게 알린다.

 

 

✅ View

 

- View · Layout 등 화면을 처리하는 곳이다.

- 업데이트 될 데이터를 Model로부터 전달 받는다.

 

 

✅ Controller

 

- 사용자에게 입력을 받고 명령을 전달하는 곳이다.

- 일반적으로 입력을 받으면 Model에게 데이터 업데이트 명령을 전달한다.

- 상황에 따라 모델을 거치지 않고 곧바로 View에게 전달하기도 한다.

 

 

 


 

 

안드로이드의 경우, View 업데이트를 Activity · Fragment에서 처리한다.

또한 사용자의 입력도 Activity · Fragment에서 받는다.

 

따라서 View와 Controller가 공존한다고 볼 수 있다.

 

Activity와 Model 이렇게 2개만 만들면 MVC 구현이 가능하다는 이야기다.

 

 

결국, 안드로이드에서의 MVC 패턴은 다음과 같다고 볼 수 있다.

 

 

 

 


 

예제

 

 

레이아웃 파일은 따로 올리지 않는다.

 

 

✅ MainActivity.java

public class MainActivity extends AppCompatActivity {

    Model model;
    TextView textView;
    Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        model = new Model();
        textView = findViewById(R.id.textView);
        button = findViewById(R.id.button);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
            
                // 모델 함수 호출하여 반환 값을 View에 업데이트
                textView.setText(model.choiceDinner());
                
            }
        });

    }
}

 

 

버튼 클릭 시 텍스트 뷰의 텍스트가 바뀌는 정말 간단한 예제다.

 

 

위에서도 언급했지만, Activity 내 View와 Controller가 공존한다.


위 예제에서 굳이 분류하자면,
사용자의 입력을 받는 Button.setOnClickListener()가 Controller가 될 수 있겠다.

또한 TextView.setText() 가 View를 업데이트 하는 부분이라고 보면 된다.

 

 


 

Model.java

public class Model {

    String dinner = "";

    public String choiceDinner() {

        Random random = new Random();
        int num = random.nextInt(10);

        switch (num) {

            case 0 : dinner = "제육볶음";
            break;
            
            ...

        }

        return dinner;

    }
}

 

 

Model은 Controller의 호출을 받아 랜덤 로직을 동작시키고

dinner라는 데이터를 정제하여 반환하는 역할을 한다.

 

 


 

결과

 

 

 

 


 

 

사실, MVC 패턴은 디자인 패턴에 대해 잘 모르는 사람들도

알게 모르게 사용해 보았을 수도 있다.

 

 

안드로이드에서는 View와 Controller에 대한 확실한 구분도 없을 뿐더러,

다른 디자인 패턴에 비해 구조도 단순하기 때문에

평소 모듈화를 신경 쓰던 사람들은 분명 위와 같은 구조를 짜봤을 것이다.

 

그래도 View와 Model이 분리된다는 구조를 의식하고 나면

더 세밀하게 패턴을 구현할 수 있다.

 

 

 


 

 

 

안드로이드에서 MVC 패턴을 적용하는 방법에 대해 알아보았다.

 

 

의식의 흐름대로 코딩을 하다가, 디자인 패턴의 존재를 알게 되면서부터

이것 저것 신경 쓰이는게 한 둘이 아니다.