아키텍처 패턴 – MVC Pattern

  • by

우리가 소프트웨어 개발자가 되기 위해서는 소프트웨어 디자인 패턴을 이해해야 합니다.

따라서 많은 기업에서 소프트웨어 디자인 패턴에 대한 이해가 있거나 직접 설계, 적용한 경험이 있는 사람을 원한다.

MVC(Model – View – Controller)


MVC 패턴은 가장 많이 사용되는 패턴입니다.

사용자가 Controller를 통해 Model을 변경하면 View가 업데이트됩니다.


Model, View, Controller 관계

MVC는 애플리케이션을 세 가지 구성 요소로 나눕니다.

  • 모델 – 모델은 단순한 데이터이며 애플리케이션의 데이터, 논리 및 규칙을 직접 관리합니다.

    즉, Model은 앱의 데이터 관리를 담당한다.

  • View – MVC에서 View는 UI 디자인에 불과하며 USER 화면에 데이터를 표시하는 방법입니다.

    View는 특정 방식으로 데이터를 표시하는 것을 의미합니다.

  • Controller – Controller는 일반적으로 MVC Controller에서 발생하는 이벤트 처리, 네비게이션, Model과 View 간의 통신 등 사용자가 수행하는 모든 작업/이벤트를 제어하는 ​​부분입니다.

    Controller는 입력을 받고 확인하고 검사한 입력을 모델에 전달합니다.

장점 단점
  • Controller가 모든 로직을 처리함으로써 구현이 간단하고 개발 기간이 짧다.

  • MVC의 깊은 이해가 없어도, 소스 코드만으로 이해하기 쉽다.

  • Activity, Fragment에 모든 코드가 편중되어 하나의 클래스에 코드가 길어진다.

MVC(Model – View – Controller) 구현


Android Studio에 Kotlin을 이용하여 MVC Pattern에서 매우 간단한 로그인 기능을 구현해 봅시다 (여기에서는 고객의 Email과 Password를 받아 검증을 마친 후 Toast 메시지를 보내는 기능까지 구현할 예정이다.

). 우리는 안드로이드 프로젝트에 3개의 package를 일으킨다.


Model 구현


MVC를 구현할 때 가장 먼저해야 할 일은 Model을 구현하는 것입니다.

이번에 작성하는 로그인 기능은 email, password만 입력하게 된다.

그리고 데이터 검증을 진행한다.

각 데이터 유효성 검사 결과를 Int 값으로 Controller에 반환하고 Controller가 이벤트를 처리합니다.

interface IUser {
    fun getEmail(): String?
    fun getPassword(): String?
    fun isValid(): Int
}
class User(
    private val email: String?,
    private val password: String?
) : IUser {

    override fun getEmail(): String? {
        return email
    }

    override fun getPassword(): String? {
        return password
    }

    override fun isValid(): Int {
        return if(TextUtils.isEmpty(getEmail()))
            0
        else if(!
Patterns.EMAIL_ADDRESS.matcher(getEmail()!
!
).matches()) 1 else if(TextUtils.isEmpty(getPassword())) 2 else if(getPassword()?.length!
!
<=6) 3 else -1; } }

컨트롤러 구현


Controller는 사용자가 로그인하는 작업을 하는 곳입니다.

사용자가 View를 통해 Controller를 조작하고 Controller가 입력을 받고 모델에서 확인한 후 Controller는 View에 메시지를 표시합니다.

interface IController {
    fun OnLogin(email: String?, password: String?)
}
class Controller(
    private val loginView: IView
):IController {

    override fun OnLogin(email: String?, password: String?) {
        val user = User(email, password)

        when (user.isValid()) {
            0 -> {
                loginView.OnLoginError("Please enter Email");
            }
            1 -> {
                loginView.OnLoginError("Please enter A valid Email");
            }
            2 -> {
                loginView.OnLoginError("Please enter Password");
            }
            3 -> {
                loginView.OnLoginError("Please enter Password greater the 6 char");
            }
            else -> {
                loginView.OnLoginSuccess("login Successful");
            }
        }

    }
}

View 구현


View는 사용자가 데이터를 입력하는 UI 부분입니다.

이 화면에서 작업한 내용을 Controller가 작업할 수 있도록 데이터를 전달합니다.

그리고, 작업한 결과물을 User에 재표시한다.

interface IView {
    fun OnLoginSuccess(message: String?)
    fun OnLoginError(message: String?)
}
class MainActivity : AppCompatActivity(), IView {
    private var mBinding: ActivityMainBinding? = null
    private val binding get() = mBinding!
!
var email: EditText? = null var password: EditText? = null var loginb: Button? = null var loginPresenter: IController? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) mBinding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) email = findViewById(R.id.edtUserName) password = findViewById(R.id.edtPassword) loginb = findViewById(R.id.mButtonLogin) loginPresenter = Controller(this) loginb?.setOnClickListener { (loginPresenter as Controller).OnLogin( email?.text.toString(), password?.text.toString().trim() ) } } override fun OnLoginSuccess(message: String?) { Toast.makeText(this,message, Toast.LENGTH_LONG).show() } override fun OnLoginError(message: String?) { Toast.makeText(this,message, Toast.LENGTH_LONG).show() } }

Reference

(Android) MVC, MVP, MVVM의 장점과 단점을 알고 쓰자!

안드로이드 개발 초기에는 아키텍처 설계에 대한 관심이 크지 않았지만 애플리케이션의 규모가 커지고 유지 보수성을 높이는 방향으로 나아갔습니다.

MVC, MVP, MVVM, MVI 등

velog.io

Kotlin Login Demo Using MVC Pattern with validation

Hi Guys, Welcome,

medium.com

모델-보기-컨트롤러 – 위키피디아, 우리 모두의 백과 사전

위키피디아, 우리 모두의 백과 사전. 모델, 뷰, 컨트롤러 관계를 묘사하는 간단한 그림. 웹 애플리케이션에서 일반적인 MVC 컴포넌트 다이어그램 모델-뷰-컨트롤러(model–view–controller, MVC)

ko.wikipedia.org