Model : ์ ํ๋ฆฌ์ผ์ด์
์ ์ ๋ณด, ๋ฐ์ดํฐ.
๋ฐ์ดํฐ ํต์ , ๋ก์ปฌ DB ์ฒ๋ฆฌ, UserManager
๋ทฐ๋ ์ปจํธ๋กค๋ฌ์ ๋ํด์ ์ด๋ค ์ ๋ณด๋ ์์ง ์์์ผ ํ๋ค.
์ฆ, ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ด ์ผ์ด๋ฌ์ ๋ ๋ชจ๋ธ์์ ํ๋ฉด UI๋ฅผ ์ง์ ์กฐ์ ํด์ ์์ ํ ์ ์๋๋ก ๋ทฐ๋ฅผ ์ฐธ์กฐํ๋ ๋ด๋ถ ์์ฑ๊ฐ์ ๊ฐ์ง๋ฉด ์ ๋๋ค.
View : Model์ด ๊ฐ๊ณ ์๋ ๋ฐ์ดํฐ๋ฅผ ์๊ฐํ.
input ํ
์คํธ, ์ฒดํฌ๋ฐ์ค ํญ๋ชฉ ๋ฑ๊ณผ ๊ฐ์ ์ฌ์ฉ์ ์ธํฐํ์ด์ค ์์, ๋ค์ ๋งํด ๋ฐ์ดํฐ ๋ฐ ๊ฐ์ฒด์ ์
๋ ฅ, ๊ทธ๋ฆฌ๊ณ ๋ณด์ฌ์ฃผ๋ ์ถ๋ ฅ์ ๋ด๋น. ์ฌ์ฉ์๊ฐ ํ๋ฉด์ ์
๋ ฅํ ๊ฐ ์ฒ๋ฆฌ
Controller : Model๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ณ , ๊ฐ์ ธ์จ ๋ฐ์ดํฐ๋ฅผ View์๊ฒ ์ ๋ฌ. View๋ก๋ถํฐ ๋ฐ์ ์ฌ์ฉ์ ์
๋ ฅ์ Model์๊ฒ ์ ๋ฌํด์ค.
๋ชจ๋ธ์ด๋ ๋ทฐ์ ๋ํด์ ์๊ณ ์์ด์ผ ํ๋ค.
๋ชจ๋ธ์ด๋ ๋ทฐ๋ ์๋ก์ ์กด์ฌ๋ฅผ ๋ชจ๋ฅด๊ณ , ๋ณ๊ฒฝ์ ์ธ๋ถ๋ก ์๋ฆฌ๊ณ , ์์ ํ๋ ๋ฐฉ๋ฒ๋ง ๊ฐ์ง๊ณ ์๋๋ฐ ์ด๋ฅผ ์ปจํธ๋กค๋ฌ๊ฐ ์ค์ฌํ๊ธฐ ์ํด ๋ชจ๋ธ๊ณผ ๊ทธ์ ๊ด๋ จ๋ ๋ทฐ์ ๋ํด์ ์๊ณ ์์ด์ผ ํ๋ค.
์ ํ๋ฆฌ์ผ์ด์
์ ๋ฉ์ธ ๋ก์ง ๋ด๋น
Model๊ณผ View๋ ์ง์ ์ ์ผ๋ก ์ฐ๊ฒฐ๋์ด ์์ง ์์. ์ด ๋์ ์ฐ๊ฒฐ์์ผ ์ฃผ๋ ๊ฒ์ด Controller
์ ํ๋ฆฌ์ผ์ด์ ์ Model, View, Controller ์ธ ๊ฐ์ง ๊ตฌ์ฑ ์์๋ก ๋ถ๋ฆฌํด ์๋ก ๋ ๋ฆฝ์ ์ผ๋ก ๋ค๋ฃฐ ์ ์๋ค. ์ด๋ ํ ๋ถ๋ถ์ ๋ณ๊ฒฝ์ด ๋ค๋ฅธ ๋ถ๋ถ์ ๋ฏธ์น๋ ์ํฅ์ ์ต์ํํ๋ฉฐ, ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ง๋ณด์์ ํ์ฅ์ด ์ฝ๋ค.
๐จ????????????????์ง๋ฌธํด์ผ ํจ
"Activity/Fragment๊ฐ Controller์ ์ญํ ๊น์ง ๋งก๊ณ ์์"๋ผ๊ณ ์ ํ์๋๋ฐ Activity/Fragment๋ฅผ Controller๋ผ๊ณ ๋ถ๋ฅด๋ ๊ฒ ์๋๊ณ Controller๊ฐ ์๋ ๋ฐ๋ก ์์ด์ผ ํ๋์ง???
๐จ????????????????์ง๋ฌธํด์ผ ํจ
View์ Model ์ฌ์ด์ ํ์ดํ๋ ์๋์ง
์์
1๋จ๊ณ: ์ฌ์ฉ์ ์ก์ ์์
์ฌ์ฉ์๊ฐ ์น ์ฌ์ดํธ์ ๊ฒ์ ๋ฐ์ ํน์ ๋์์ ์ ๋ชฉ์ ์ ๋ ฅํ๊ณ ๊ฒ์ ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.2๋จ๊ณ: Model ์ ๋ฐ์ดํธ
๊ฒ์ ์์ฒญ์ ๋ฐ์ Controller๋ ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๋์ ์ ๋ชฉ์ ๊ธฐ๋ฐ์ผ๋ก BookModel์์ ํด๋น ๋์ ์ ๋ณด๋ฅผ ์กฐํํฉ๋๋ค. BookModel์ ๋์์ ์ ๋ชฉ, ์ ์, ์ถํ๋ ๋, ISBN, ๋์ฌ ์ํ ๋ฑ์ ์ ๋ณด๋ฅผ ํฌํจํ๊ณ ์์ต๋๋ค.
๊ฒ์ ๊ฒฐ๊ณผ์ ํด๋นํ๋ ๋์ ์ ๋ณด(๋ค)๋ BookModel์ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๊ฐ์ ธ์ต๋๋ค.3๋จ๊ณ: View ์ ๋ฐ์ดํธ
Controller๋ BookModel๋ก๋ถํฐ ๋ฐ์ ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์์๊ฒ ๋์ ์ ๋ณด๋ฅผ ํ์ํ๋ View๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค. ์ด ๋, View๋ ๋์์ ๋ชฉ๋ก์ ํ์ํ๋ฉฐ, ๊ฐ ๋์ ์์๋ ๋์ฌ ๊ฐ๋ฅ ์ฌ๋ถ์ ๋์ฌ๋ฅผ ์ํ ๋ฒํผ์ด ํ์๋ฉ๋๋ค.
์ฌ์ฉ์๊ฐ ํน์ ๋์์ ๋์ฌ ๋ฒํผ์ ํด๋ฆญํ๋ฉด, Controller๋ ํด๋น ๋์์ ๋์ฌ ์์ฒญ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ๋ค์ BookModel์ ํธ์ถํฉ๋๋ค. BookModel์ ํด๋น ๋์์ ๋์ฌ ์ํ๋ฅผ ์ ๋ฐ์ดํธํ๊ณ , ์ด ์ ๋ณด๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํฉ๋๋ค.
๋์๊ฐ ์ฑ๊ณต์ ์ผ๋ก ๋์ฌ๋๋ฉด, Controller๋ ๋์ฌ ์ฑ๊ณต ๋ฉ์์ง๋ฅผ ํฌํจํ ์ ๋ฐ์ดํธ๋ View๋ฅผ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ค๋๋ค.
Book ํด๋์ค๋ ๋์ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ณ ๊ด๋ฆฌ
UI๋ฅผ ์ง์ ์์ ํ๋ฉด ์๋๋ค.
data class Book(val title: String, val author: String)
Book ํด๋์ค๊ฐ View์ ๊ตฌํ์ ์์กดํ๊ฒ ๋ง๋ฆ
data class Book(val title: String, val author: String, val view: BookView) {
fun display() {
view.showTitle(title)
}
}
BookView ํด๋์ค๋ ์ฌ์ฉ์์๊ฒ ์ ๋ณด๋ฅผ ํ์ํ๋ ๋ฐฉ๋ฒ์ ์ ์
Model๋ก๋ถํฐ ์ง์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ผ๋ฉด ์๋๊ณ BookController๋ฅผ ํตํด ๋ฐ์์จ ํ ์ถ๋ ฅํด์ผ ํ๋ค.
class BookView {
fun showBooks(books: List<Book>) {
println("Search Results:")
books.forEach { book ->
println("'${book.title}' by ${book.author}")
}
}
}
BookView๋ Book ๋ชจ๋ธ์ ์ง์ ์์กดํ๊ฒ ๋จ
class BookView(private val books: List<Book>) {
fun displayBooks() {
for (book in books) {
println("Book: ${book.title} by ${book.author}")
}
}
}
BookController ํด๋์ค๋ ์ฌ์ฉ์์ ์
๋ ฅ์ ์ฒ๋ฆฌํ๊ณ
: ๊ฒ์ ์ฟผ๋ฆฌ(์
๋ ฅ)์ ์ธ์๋ก ๋ฐ๊ณ ๊ฒ์์ฐฝ์ ํตํด ์
๋ ฅํ ๊ฒ์์ด๋ฅผ ์ฒ๋ฆฌ
Book ๋ชจ๋ธ ๊ฐ์ฒด ๋ฆฌ์คํธ๋ฅผ ๊ด๋ฆฌํ๊ณ filter๋ฅผ ํตํด Model์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์กฐํ
BookView ์ธ์คํด์ค์ ์ ๊ทผํด ํํฐ๋ง๋ ๋์ ๋ฆฌ์คํธ๋ฅผ searchBooks(results)๋ก ์ ๋ฌํจ
class BookController {
private val books = listOf(
Book("The Great Gatsby", "F. Scott Fitzgerald"),
Book("To Kill a Mockingbird", "Harper Lee"),
Book("1984", "George Orwell")
)
private val view = BookView()
fun searchBooks(query: String) {
val results = books.filter { it.title.contains(query, ignoreCase = true) }
view.showBooks(results)
}
}
fun main() {
val controller = BookController()
println("Enter book title to search:")
val query = readLine() ?: ""
controller.searchBooks(query) // ์ฌ์ฉ์ ์
๋ ฅ์ ๊ธฐ๋ฐ์ผ๋ก ๊ฒ์
}
๐จ???????????????์ง๋ฌธํด์ผ ํจ
:์ด๋ ๊ฒ ํ๋ ์ด์ ๊ฐ ์์ ํ ๋ ์ฌ๋ฌ ๋ถ๋ถ์ ์์ ํ์ง ์๊ณ Controller๋ง ์์ ํ๋ฉด ๋๊ฒ ํ๋ ค๊ณ ๊ทธ๋ฐ๊ฐ...?