우리가 소프트웨어 개발자가 되기 위해서는 소프트웨어 디자인 패턴을 이해해야 합니다.
따라서 많은 기업에서 소프트웨어 디자인 패턴에 대한 이해가 있거나 직접 설계, 적용한 경험이 있는 사람을 원한다.
MVC(Model – View – Controller)
MVC 패턴은 가장 많이 사용되는 패턴입니다.
사용자가 Controller를 통해 Model을 변경하면 View가 업데이트됩니다.
MVC는 애플리케이션을 세 가지 구성 요소로 나눕니다.
- 모델 – 모델은 단순한 데이터이며 애플리케이션의 데이터, 논리 및 규칙을 직접 관리합니다.
즉, Model은 앱의 데이터 관리를 담당한다. - View – MVC에서 View는 UI 디자인에 불과하며 USER 화면에 데이터를 표시하는 방법입니다.
View는 특정 방식으로 데이터를 표시하는 것을 의미합니다. - Controller – Controller는 일반적으로 MVC Controller에서 발생하는 이벤트 처리, 네비게이션, Model과 View 간의 통신 등 사용자가 수행하는 모든 작업/이벤트를 제어하는 부분입니다.
Controller는 입력을 받고 확인하고 검사한 입력을 모델에 전달합니다.
장점 | 단점 |
|
|
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