์๋ ํ์ธ์ Foma ๐ ์ ๋๋ค!
์ ๋ฒ ๊ธ์ MVC ํจํด์ ๋ํด์ ๋ค๋ค์๋๋ฐ iOS์์ ๋ค๋ฃจ๋ ๊ฒ๊ณผ๋ ์กฐ๊ธ ๋ค๋ฅด๊ฒ
์ปค์คํ ๋ทฐ๋ฅผ ์ง์ ๋ง๋ค์ด์ ๋ญ๊ฐ ๋ ์ ์์ ์ธ MVC ํจํด์ ๊ตฌํํ์ด์.
(ํน์ ์๋ณด์ จ๊ฑฐ๋ ๊ถ๊ธํ์ ๋ถ๋ค์ ์ฌ๊ธฐ ์์ ๋ด์ฃผ์ธ์!)
ํ์ง๋ง ๋ณดํต MVCํ๊ณ ๋ ์กฐ๊ธ ๋ค๋ฅธ ๋ถ๋ถ์ด ์์ด์.
๊ทธ๋์ ์ค๋์ ์ ํ์ MVC ํจํด์ ๋ํด์ ์ ๋ฆฌํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค!
Apple's MVC
์ ํ์ ์ ํ์ ์ธ MVC ํจํด์์ ๋ชจ๋ธ๊ณผ ๋ทฐ์ ์ปจํธ๋กค๋ฌ๊ฐ ์๋ก ์์กด์ ์ธ ๊ฒ์ ๋ถ๋ฆฌํ๊ธฐ ์ํด
์์ ๋ค๋ง์ MVC ํจํด์ ๊ฐ๋ฐํฉ๋๋ค.
์ปจํธ๋กค๋ฌ๊ฐ ๋ทฐ์ ๋ชจ๋ธ์ ์ฐ๊ฒฐ์์ผ์ฃผ์ด ์๋ก ๋ถ๋ฆฌ๋์ด ์๊ณ ์๋ก์ ๋ํด ์ ํ์๊ฐ ์๊ฒ๋ ๋ง๋๋ ค๊ณ ํ์ผ๋....
์ปจํธ๋กค๋ฌ๊ฐ ๋ทฐ์ ๋ผ์ดํ ์ฌ์ดํด์ ๊ด์ฌํ๊ฒ ๋๋ฉด์ MV - C ํจํด์ด ๋์ด๋ฒ๋ฆฝ๋๋ค.
์ด๋ ๊ฒ ๋๋ฉด์ ๋ทฐ์ ์ฝ๋์ ์ปจํธ๋กค๋ฌ์ ์ฝ๋๊ฐ ๊ฒน์น๋ฉด์ ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ทฐ์ปจํธ๋กค๋ฌ๊ฐ ๋น๋ํด์ง๊ณ ์ญํ ์ด ์ง๋์น๊ฒ ์ปค์ ธ๋ฒ๋ ธ์ต๋๋ค.
์ด๋ ๋ค๋ณด๋ ํ์ฌ์ MVP ๋์์ธ ํจํด๊ณผ ๋น์ทํ๊ฒ ๋์ด๋ฒ๋ ธ์ฃ .
์ฅ์ ๊ณผ ๋จ์ ์ ์ ๋ฆฌํ๋ฉด ์๋์ ๊ฐ์ต๋๋ค.
์ฅ์
- ๊ฐ๋ฐ ์๋๊ฐ ์๋์ ์ผ๋ก ๋น ๋ฅด๋ค.
- ์ฝ๋๊ฐ ์ ๊ฒ ์ฐ์ธ๋ค.
- ๋ง์ ๊ฐ๋ฐ์์๊ฒ ์น์ํ๋ค.
- ๋ชจ๋ธ๊ณผ ๋ทฐ์ ์ํธ์์กด์ฑ์ ์์ด๋ค.
๋จ์
- ๋ทฐ์ปจํธ๋กค๋ฌ์ ์ญํ ์ด ๋น๋ํด์ง๋ค.
- ํ ์คํธ๊ฐ ์ฉ์ดํ์ง ์๋ค.
- ์ ์ง๋ณด์๊ฐ ํ๋ค๋ค.
Model
๋ชจ๋ธ์ ๊ธฐ์กด์ MVC ํจํด๊ณผ ๋์ผํ๊ฒ ๋ทฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ ์ญํ ์ ๋๋ค.
์ฝ๋๋ ์๋์ ๊ฐ์ต๋๋ค.
import UIKit
struct AppleMVC_Character {
//ํ๋ฉด์ ๊ตฌ์ฑํ ๋ฐ์ดํฐ
let image:UIImage
let name:String
let gender:String
let country:String
//์ด๊ธฐํ
init(name:String,image:UIImage,gender:String,country:String) {
self.name = name
self.image = image
self.gender = gender
self.country = country
}
}
ViewController
์ปจํธ๋กค๋ฌ ์์ ๋ทฐ๊ฐ ์๋ ํํ๋ก ์ปจํธ๋กค๋ฌ๊ฐ ์์ ์ ์ญํ ๊ณผ ๋ทฐ์ ์ญํ ์ ๋์์ ์ํํ๋ค.
์ฝ๋๋ ์๋์ ๊ฐ์ต๋๋ค.
๋ทฐ์ปจํธ๋กค๋ฌ ์์ฒด์์ ์ ์ ์ ๋ํ ์ธํฐ๋์ ์ ๊ฐ์งํ๊ณ ๋ชจ๋ธ์ ์ ๋ฐ์ดํธํ๋ฉฐ
๋ฐ๋ ๋ชจ๋ธ์ ๊ฐ์ ๋ง๊ฒ ๋ทฐ๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค.
์ปจํธ๋กค๋ฌ์์ ๊ฑฐ์ ๋ชจ๋ ๊ฒ์ ํ๊ธฐ ๋๋ฌธ์ ๋น๊ต์ ๋จ์ํ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
import UIKit
class AppleMVC_CharacterViewController: UIViewController {
//์ ์ฒด ๋ชจ๋ธ ๋ฐ์ดํฐ
let characters:[AppleMVC_Character] = [
AppleMVC_Character(name:"์คํฐ์ง๋ฐฅ",image: #imageLiteral(resourceName: "แแ
ณแแ
ฉแซแแ
ตแแ
กแธ"), gender: "๋จ์", country:"๋ฏธ๊ตญ"),
AppleMVC_Character(name:"๋ฑ์ด",image: #imageLiteral(resourceName: "แแ
ฎแผแแ
ต"), gender: "๋จ์", country:"๋ฏธ๊ตญ"),
AppleMVC_Character(name:"์ง์ง์ด",image: #imageLiteral(resourceName: "แแ
ตแผแแ
ตแผแแ
ต"), gender: "๋จ์", country:"๋ฏธ๊ตญ"),
AppleMVC_Character(name:"ํ๋ญํฌํค",image: #imageLiteral(resourceName: "แแ
ณแฏแ
แ
กแผแแ
ณแแ
ฉแซ"), gender: "๋จ์", country:"๋ฏธ๊ตญ"),
AppleMVC_Character(name:"ํํ์ฌ์ฌ",image: #imageLiteral(resourceName: "แแ
ฉแผแแ
ฉแผแแ
ฎแแ
ตแซ"), gender: "์ฌ์", country:"๋ฏธ๊ตญ")
]
//MARK:- IBOutlets
@IBOutlet weak var country: UILabel!
@IBOutlet weak var name: UILabel!
@IBOutlet weak var gender: UILabel!
@IBOutlet weak var image: UIImageView!
@IBOutlet weak var nextButton: UIButton!
@IBOutlet weak var previousButton: UIButton!
//MARK:- Properties
//ํ์ฌ ์ธ๋ฑ์ค
private var index:Int = 0
//ํ์ฌ ๋ชจ๋ธ ๋ฐ์ดํฐ
private var character:AppleMVC_Character!
//MARK:- Life Cycle
override func viewDidLoad() {
super.viewDidLoad()
configure()
}
//MARK:- Helpers
//์ด๊ธฐํ
private func configure() {
character = characters[index]
updateView()
}
//๋ทฐ ์
๋ฐ์ดํธ
private func updateView() {
//์๋ก์ด ๋ชจ๋ธ
let newCharacter = characters[index]
//์๋ก์ด ๋ชจ๋ธ์ ๋ง๊ฒ ๋ทฐ ๋ณ๊ฒฝ
self.image.image = newCharacter.image
self.name.text = newCharacter.name
self.gender.text = newCharacter.gender
self.country.text = newCharacter.country
}
//MARK:- IBActions
//์ด์ ๋ฒํผ์ ๋๋ ๋ค๋ฉด
@IBAction func tapPreviousButton(_ sender: Any) {
//์ด์ ์ธ๋ฑ์ค๋ก ๋ณ๊ฒฝ
if index > 0 {
index -= 1
}
//๋ทฐ ์
๋ฐ์ดํธ
updateView()
}
//๋ค์ ๋ฒํผ์ ๋๋ ๋ค๋ฉด
@IBAction func tapNextButton(_ sender: Any) {
//๋ค์ ์ธ๋ฑ์ค๋ก ๋ณ๊ฒฝ
if index < 4 {
index += 1
}
//๋ทฐ ์
๋ฐ์ดํธ
updateView()
}
}
์ค๋์ ์ด๋ ๊ฒ ์ ํต์ ์ธ MVC์๋ ์ฝ๊ฐ ๋ค๋ฅธ Apple๋ง์ MVC์ ๋ํด์ ์์๋ณด์์ต๋๋ค.
์ต์ํด์ ๊ทธ๋ฐ์ง ํ์คํ ๊ตฌ์กฐ๋ ๋จ์ํ๊ณ ๊ฐ๋ฐํ๋ ์๋๊ฐ ๋นจ๋์ต๋๋ค.
ํน์๋ผ๋ ๊ถ๊ธํ์ ์ ์ด ์๊ฑฐ๋ ํ๋ฆฐ ๋ถ๋ถ์ด ์๋ค๋ฉด ๋๊ธ๋ก ์๋ ค์ฃผ์ธ์!
'๐ iOS > Architecture' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Design Pattern] RIBs๋?(feat. Uber) (0) | 2021.08.18 |
---|---|
[Design Pattern] MVP ํจํด์ด๋? (0) | 2021.08.11 |
[Design Pattern] ReactorKit์ด๋? (0) | 2021.06.17 |
[Design Pattern] MVCํจํด์ด๋? (Model-View-Controller) (0) | 2021.06.03 |
[iOS ๋ฉด์ ์ง๋ฌธ] ์ฑ๊ธํค ํจํด์ด๋? (Swift Singleton Pattern) (0) | 2020.12.11 |
๋๊ธ