๐ก ๋์์ธํจํด ์ค์ ํ๋์ธ MVC ํจํด์ ๋ํ์ฌ ํ์ตํ์์ต๋๋ค !
MVC
- MVC๋ Model, View, Controller์ ์ฝ์๋ก ํ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ ํ๋ก์ ํธ๋ฅผ ๊ตฌ์ฑํ ๋ ๊ตฌ์ฑ์์๋ฅผ ์ธ๊ฐ์ง ์ญํ ๋ก ๊ตฌ๋ถํ ํจํด์ ๋๋ค.
- ์ฌ์ฉ์๊ฐ controller๋ฅผ ์กฐ์ํ๋ฉด controller๋ model์ ํตํด์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
- ๊ทธ ๋ฐ์ดํฐ๋ฅผ ๋ฐํ์ผ๋ก ์๊ฐ์ ์ธ ํํ์ ๋ด๋นํ๋ View๋ฅผ ์ ์ดํํ ์ฌ์ฉ์์๊ฒ ์ ๋ฌํฉ๋๋ค.
MVC์ ํน์ง
- MVC ํจํด์ ์ ์ ํ๊ฒ ์ฌ์ฉํ๋ฉด, ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ก๋ถํฐ ๋น์ฆ๋์ค ๋ก์ง์ ๋ถ๋ฆฌํ ์ ์์ต๋๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ์ ์๊ฐ์ ์ธ ์์์ ์คํ๋๋ ๋น์ฆ๋์ค ๋ก์ง์ ์๋ก ์ํฅ ์์ด ์ฝ๊ฒ ๊ณ ์น ์ ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ์ ์์ต๋๋ค.
Model
- Data์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ด๋ถ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ๊ธฐ ์ํ ์ญํ ์ ํฉ๋๋ค.
- ์ปจํธ๋กค๋ฌ๊ฐ ํธ์ถํ๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๋ํ์ฌ ์ฌ์ฉ์ ์ ์ถ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๊ฑฐ๋ ์ ๋ณด๋ค์ ๊ฐ๊ณต์ ์ฑ ์์ง๋ ์ปดํฌ๋ํธ๋ฅผ ๋ปํฉ๋๋ค.
// ์ฃผ์ฌ์๋ฅผ ๋์ง๋ ํ์๋ฅผ ๊ด๋ฆฌํ๋ DiceModel์ ์์ฑํ์์ต๋๋ค.
class DiceModel {
// ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ์ง๋ ์์ง๋ง, ์๋์ ๊ฐ์ด ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํฉ๋๋ค.
val color = Color.Red
fun rollDice(): Int { // ๋ด๋ถ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํฉ๋๋ค
return (1..6).random()
}
}
๋ชจ๋ธ์ ์ ์ฝ์ฌํญ
- ๋ชจ๋ธ์ ์ฌ์ฉ์๊ฐ ํธ์งํ๊ธธ ์ํ๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ด์ผ ํฉ๋๋ค.
- ๋ทฐ๋ ์ปจํธ๋กค๋ฌ์ ๋ํด์ ์ด๋ค ์ ๋ณด๋ ์์ง ๋ง์์ผ ํฉ๋๋ค.
- ์์ , ์ญ์ , ์ถ๊ฐ ๋ฑ ๋ณ๊ฒฝ์ ๋ํ ์ฒ๋ฆฌ๋ฐฉ๋ฒ์ด ๊ตฌํ๋์ด์ผ ํฉ๋๋ค.
View
- ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ง๋ ํ๋ฉด, ์ฆ UI๋ฅผ ๋ด๋นํฉ๋๋ค.
- ์ฌ์ฉ์์ ์ํธ์์ฉ์ ํ์ฌ ์ปจํธ๋กค๋ฌ๋ก๋ถํฐ ๋ฐ์ ๋ชจ๋ธ์ ๊ฒฐ๊ณผ๊ฐ์ ์ฌ์ฉ์์๊ฒ ํ๋ฉด์ผ๋ก ์ถ๋ ฅํ๋ ์ผ์ ํฉ๋๋ค.
class DiceView {
// ์ปจํธ๋กค๋ฌ๋ก๋ถํฐ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์์ ์ฌ์ฉ์์๊ฒ UI๋ฅผ ํ์ํฉ๋๋ค.
fun displayResult(result: Int) {
println("์ฃผ์ฌ์ ๊ฒฐ๊ณผ: $result")
}
// ์ฌ์ฉ์์ ์ํธ์์ฉํ ์ ์์ต๋๋ค.
fun promptRoll() {
println("์ฃผ์ฌ์๋ฅผ ๊ตด๋ฆฌ๋ ค๋ฉด ์ํฐ๋ฅผ ๋๋ฅด์ธ์.")
}
}
๋ทฐ์ ์ ์ฝ์ฌํญ
- ๋ชจ๋ธ์ด ๊ฐ์ง๊ณ ์๋ ์ ๋ณด๋ฅผ ๋ฐ๋ก ์ ์ฅํ๋ฉด ์๋ฉ๋๋ค.
- ๋ชจ๋ธ์ด๋ ์ปจํธ๋กค๋ฌ์ ๊ฐ์ ๋ค๋ฅธ ๊ตฌ์ฑ์์๋ค์ ๋ชฐ๋ผ์ผ ํฉ๋๋ค.
- ๋ณ๊ฒฝ์ ๋ํ UI ๋ก์ง ์ฒ๋ฆฌ ๋ฐฉ๋ฒ์ด ๊ตฌํ๋์ด์ผ ํฉ๋๋ค.
Controller
- Model๊ณผ View, ๋ฐ์ดํฐ์ ์ฌ์ฉ์ ์ธํฐํ์ด์ค ์์๋ค์ ์๋ ์ธํฐํ์ด์ค ์ญํ ์ ํฉ๋๋ค.
- Model์ ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ์ง ์๋ ค์ฃผ๋ฉฐ, View์ ์์ฒญ์ด ์์ผ๋ฉด Model์ ํธ์ถํ์ฌ ์ ๋ฌด๋ฅผ ์ํํ๊ณ ๋ค์ View์ ์ ๋ฌํ๋ ์ญํ ์ ํฉ๋๋ค.
- ์ฌ์ฉ์๊ฐ ๋ฐ์ดํฐ๋ฅผ ํด๋ฆญํ๊ณ , ์์ ํ๋ ๊ฒ์ ๋ํ ์ด๋ฒคํธ๋ค์ ์ฒ๋ฆฌํ๋ ๋ถ๋ถ์ ๋ปํฉ๋๋ค.
// ์ฌ์ฉ์์ ์
๋ ฅ์ ์ฒ๋ฆฌํ๊ณ , Model๊ณผ View๋ฅผ ์ฐ๊ฒฐํฉ๋๋ค.
class DiceController(
private val model: DiceModel,
private val view: DiceView
) {
fun start() {
view.promptRoll() // ๋ทฐ ๋ก์ง ํธ์ถ
readLine() // ์ฌ์ฉ์ ์
๋ ฅ ๋๊ธฐ
val result = model.rollDice()
// ๋ชจ๋ธ๊ณผ ์ํธ์์ฉํ์ฌ ๊ฒฐ๊ณผ๋ฅผ View๋ก ์ ๋ฌํฉ๋๋ค
// ๋น์ฆ๋์ค ๋ก์ง ํธ์ถ
view.displayResult(result)
}
}
์ปจํธ๋กค๋ฌ ์ ์ฝ์ฌํญ
- ์ปจํธ๋กค๋ฌ๋ ๋ค๋ฅธ ๊ตฌ์ฑ์์์ ๋ค๋ฅด๊ฒ ๋ชจ๋ธ์ด๋ ๋ทฐ์ ๋ํด์ ์๊ณ ์์ด์ผ ํฉ๋๋ค.
- ๋ชจ๋ธ์ด๋ ๋ทฐ์ ๋ณ๊ฒฝ์ ๊ด์ฐฐํ์ฌ ์๋ก ์ํธ์์ฉํ๊ฒ ํด์ผํฉ๋๋ค.
์ ๋ฆฌ
- MVC ํจํด์ ์ญํ ๋ถ๋ด์ ์ด๋ป๊ฒ ๋๋ ๊ฒ์ธ์ง ๊ฐ์ด๋๋ผ์ธ์ ์ ์ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
์ฅ์
- ๊ฐ ๊ตฌ์ฑ์์๋ค์ ๋ ๋ฆฝ์์ผ ํ์ ์ ํ ๋ ๋งก์ ๋ถ๋ถ์ ๋ํ ๊ฐ๋ฐ์๋ง ์ง์คํ ์ ์๊ฒ ๋์ด ๊ฐ๋ฐ์ ํจ์จ์ฑ์ด ์ฆ๊ฐํฉ๋๋ค.
๋จ์
- ํ์ง๋ง Model๊ณผ View ์ฌ์ด์๋ Controller๋ฅผ ํตํด ์ํต์ ์ด๋ฃจ๊ธฐ ๋๋ฌธ์ ์์กด์ฑ์ ์์ ํ ๋ถ๋ฆฌํ๊ธฐ ์ด๋ ต์ต๋๋ค.
- ๋๊ท๋ชจ ํ๋ก๊ทธ๋จ์ ๊ฒฝ์ฐ ์ปจํธ๋กค๋ฌ๊ฐ ๋ถํ์ํ๊ฒ ์ปค์ง๋ ํ์์ด ๋ฐ์ํ๊ธฐ๋ ํฉ๋๋ค.
- ์ด๋ฅผ Massive-View-Controller ํ์์ด๋ผ๊ณ ํ๋ฉฐ, ์ด๋ฅผ ๋ณด์ํ๊ธฐ ์ํด์ MVP, MVVM ํจํด์ด ์๊ฒจ๋ฌ์ต๋๋ค.