์ฝ๋๋ ์๋ github์์ ๋ณผ ์ ์์ต๋๋ค!
https://github.com/deslog/awesome-swift
๐ ์ฑ๊ธํด ํจํด ๊ณต๋ถํ๊ธฐ ์ ์ ์์์ผ ํ ๊ฐ๋ !
๐ ๋์์ธํจํด์ด๋?
์ฝ๋๋ฅผ ์์ฑํ ๋ ๋ฐ์ํ๋ ๋ฌธ์ ๋ค์ ๋ณด๋ค ์ข์ ๋ฐฉ๋ฒ์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋๋ก ๋ฏธ๋ฆฌ ํ์์ ์ ํด๋๋ ๊ฒ? ๋ฐฉ๋ฒ๋ก ? ์ด๋ค! ๋ฏธ๋ฆฌ ์ข์ ์ฝ๋์ ๋ํด์ ์ ์ํด๋๊ณ , ๋ฌธ์ ๊ฐ ์๊ฒผ์ ๋ ๊ทธ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋ฐฉ๋ฒ๋ก ์ ์ผ๋ก ํด๊ฒฐํ ์ ์๋ ๊ฒ์ด ๋์์ธํจํด! ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค ~
๐ ๋์์ธํจํด์ ๋ถ๋ฅ?
์์ฑ, ๊ตฌ์กฐ, ํ์ ํจํด ์ธ๊ฐ์ง๋ก ๋๋๋ค. ์ด๋ฒ์ ์์๋ณผ ์ฑ๊ธํดํจํด์ ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ ์ฌ์ฉ๋๋ ๋์์ธ ํจํด ์ด๊ธฐ ๋๋ฌธ์ ๋ถ๋ฅ๋ '์์ฑ'์ ์ํ๋ค.
๐ ํด๋์ค์ ๊ฐ์ฒด
ํด๋์ค์ ๊ฐ์ฒด์ ์ฐจ์ด์ ๋ํด์ ์์์ผํ๋ค. ํด๋์ค๋ ์ฝ๋๋ฅด ์์ฑํ ๋ ๋ฏธ๋ฆฌ ํํ๋ฅผ ์ง๋๋ ๊ฒ์ ๋งํ๋ค. ์์๋ก ๋ค๋ฉด ๋นตํ!! ์ผ์ ํ ๋นต์ ์ฐ์ด๋ด๊ธฐ ์ ์ ๋ง๋ค์ด๋๋ ํ์ ์๋ฏธํ๋ค.
๊ฐ์ฒด๋, ํด๋์ค๋ฅผ ์ด์ฉํ์ฌ ์์ฑ๋ object๋ฅผ ๋งํ๋ค. ์์์ ์ ์ํ ํด๋์ค์ ๊ธฐ๋ฐํ ๋ฌด์ธ๊ฐ๋ฅผ ๋ง๋ค๋ฉด ๊ฐ์ฒด! (์ฝ๋์์ ๋ง๋ค์ด์ก๋ค, ๋ผ๋ ๊ฒ์ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ๋ค~ ํ๋ ์๋ฏธ์ด๋ค.) ์ฃผ๋ก '์ธ์คํด์คํ'ํ๋ค ๋ผ๊ณ ๋งํ๋๋ฐ, ์ธ์คํด์คํ ํด์ ๋ง๋ค์ด์ง ๋์ด ๋ฐ๋ก ๊ฐ์ฒด์ด๋ค.
// Cat ํด๋์ค
class Cat {
var ๋ฌด๋ฌ: String
var ๋ชธ๋ฌด๊ฒ: Int
}
// ๋ฏธ์ ๋ผ๋ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์๋ค.
// ๋ฏธ์ ๋ class Cat ์ผ๋ก๋ถํฐ ๋ง๋ค์ด์ง ๊ฐ์ฒด์ด๋ค.
// ์น์ฆ๋ฌด๋ฌ์ 4ํค๋ก์ ๋ชธ๋ฌด๊ฒ๋ฅผ ๊ฐ๋๋ค.
let meyou = Cat()
meyou.๋ฌด๋ฌ = "์น์ฆ"
meyou.๋ชธ๋ฌด๊ฒ = 4
โซ๏ธ ์ฑ๊ธํด ํจํด์ ๊ฐ๋จํ ์ ์
์ฑ๊ธํด ํจํด์, ๋ด๊ฐ ์ด๋ค ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ ๊ทธ ๊ฐ์ฒด ํ๋๋ง์ ์ฌ์ฉํ๋ ํจํด์ ์๋ฏธํ๋ค. ๋ง์ฝ ์์ฃผ ์จ์ผํ๋ ๊ฐ์ฒด์ผ ๊ฒฝ์ฐ, ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ ค๋๊ฒ ์ง? ๊ทธ๋ผ ๊ทธ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ ค๋์ ๊ฐ์ฒด๋ฅผ ์ง์์ ์ผ๋ก ๋ฐ๋ฆฌ๊ณ ๋ค๋๋ฉด์ ์ฌ์ฉํ๊ณ , ๊ณ์ ์ฐธ์กฐํด์ ์ด์ฉํ๋ ํจํด์ด๋ค.
๐ ์ฃผ๋ก ์ธ์ ์ฌ์ฉํ๋์?
APIํธ์ถํ ๋ ์์ฃผ ์ฌ์ฉํ๋ค. API๋ฅผ ํธ์ถํ๋ ํด๋์ค(๋งค๋์ )๋ฅผ ๋ง๋ค์ด๋๊ณ , ์๋ฅผ ํ๋ฒ ๊ฐ์ฒด๋ก ์์ฑํด๋๋ฉด, ์ด ๊ฐ์ฒด๋ฅผ ๊ณ์ ์ฌ์ฉํ๋ ๋ฐฉ์์ผ๋ก ์์ฃผ ์ฌ์ฉ ๋๋ค.
โซ๏ธ ์ฑ๊ธํด ํจํด xcode๋ก ์ดํด๋ณด๊ธฐ
๊ทธ๋์ ์ฑ๊ธํดํจํด์ ์ด๋ป๊ฒ ์ฌ์ฉํ๋๊ฑด๋ฐ? xcode๋ก ์์ฃผ์์ฃผ ๊ฐ๋จํ๊ฒ ๊ตฌํํด๋ณด์.
1๏ธโฃ ์ฐ์ , ์ฑ๊ธํดํจํด์ ์ฌ์ฉํ์ง ์์์๋๋ฅผ ์ดํด๋ณด์.
๐ singleton class ์์ฑ
xcode๋ก App ํ๋ก์ ํธ๋ฅผ ํ๋ ์์ฑํด์ฃผ๊ณ , ํ๋์ swift ํ์ผ์ ๋ง๋ค์ด์ class ๋ฅผ ๋ง๋ค์ด๋ณด์.
๋๋ MySingleton์ด๋ผ๋ ํ์ผ์ ๋ง๋ค๊ณ , MySingleton์ด๋ผ๋ class๋ฅผ ๋ง๋ค์ด์ฃผ์๋ค.
// MySingleton
import Foundation
final class MySingleton: NSObject { }
๐ view์์ ์ธ์คํด์ค๋ฅผ ๋ง๋ค์ด๋ณด์.
์ฑ๊ธํด ํจํด class๋ฅผ ๋ง๋ค์๋ค๋ฉด view์์ ์ธ์คํด์ค๋ฅผ ๋ง๋ค์ด์ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด๋ณด์.
// MySingletonViewController
class MySingletonViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let firstObject = MySingleton()
let secondObject = MySingleton()
}
๋๋ ์ด๋ ๊ฒ MySingletonViewController๋ผ๋ ๋ทฐ์ปจ์ ํ๋ ๋ง๋ค๊ณ ๊ทธ ๋ด๋ถ์ ์ธ์คํด์ค๋ฅผ ์์ฑํด์ฃผ์๋ค. ์ด์ ์ด๋ป๊ฒ ๊ฐ์ฒด๊ฐ ์์ฑ๋๋์ง ์ดํด๋ณด์.
๐ ๋๋ฒ๊น ์ ํตํด์ ๊ฐ์ฒด์ ๋ฉ๋ชจ๋ฆฌ์ฃผ์ ์ดํด๋ณด๊ธฐ
์์์, ์ฝ๋ฉ์์ ๊ฐ์ฒด๊ฐ ๋ง๋ค์ด์ก๋ค = ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ๋ค ์๋ฏธ์์ ๋จผ์ ์ค๋ช ํ๋ค. ๊ฐ ๊ฐ์ฒด์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ํ์ธํด๋ณด์.
๋จผ์ ์ด๋ ๊ฒ ๊ฐ์ฒด๊ฐ ์์ฑ๋๋ ๋ฐ๋ก ๋ค์์ค์ breakpoint๋ฅผ ์ฐ์ด์ฃผ๊ณ ! run์ ๋๋ ค๋ณด์.
๊ทธ๋ผ ์ด๋ ๊ฒ ์๋ ์ฝ์์ฐฝ์์ LLDB ๋๋ฒ๊ฑฐ๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ์ฌ๊ธฐ์ ์๋ ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํด์ฃผ๋ฉด, ํด๋น ๊ฐ์ฒด๊ฐ ์ด๋ค ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ์๋์ง ํ์ธ์ด ๊ฐ๋ฅํ๋ค!
po <๊ฐ์ฒด์ด๋ฆ>
ํ์ธํด๋ณด๋๊น, firstObject์ secondObject๋ ๊ฐ๊ฐ ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๊ฐ์ก๋ค. ๊ฒฐ๋ก ์ ์ผ๋ก, ์ด๋ ๊ฒ ์ฌ์ฉํ๋ ๊ฒ์ ์ฑ๊ธํด์ด ์๋๋ค. ์ฑ๊ธํด์, ๊ฐ์ฒดํ ์์ผ๋๊ณ , ํด๋น ๊ฐ์ฒด๋ฅผ ๋์ผํ ๋ฉ๋ชจ๋ฆฌ์์ ์ง์์ ์ผ๋ก ์ฌ์ฉํ๋ ํจํด์ด๋ค. ์ ์ด์ ์ ๋๋ก ์ฑ๊ธํค ํจํด์ ๋ง๋ค์ด๋ณด์.
2๏ธโฃ ์ฑ๊ธํค ํจํด ๋ง๋ค๊ธฐ
๐ ์ฑ๊ธํค class ๋ฅผ ๋ง๋ค์ด์ฃผ์.
// MySingleton
import Foundation
final class MySingleton: NSObject {
static let shared = MySingleton()
private override init() { }
}
MySingleton์ด๋ผ๋ final class๋ฅผ ๋ง๋ค์ด์ฃผ๊ณ , ์์ ์๊ธฐ ์์ ์ ๋ฐ๋ผ๋ณด๊ณ ์๋ shared๋ผ๋ ๋ณ์๋ฅผ ๋ง๋ค์ด์คฌ๋ค. ๊ทธ๋ฆฌ๊ณ init๊น์ง ์๋ฃ.
๐ ์ด์ ์ฑ๊ธํค ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ํ์ธํด๋ณด์
์์์ ์ฌ์ฉํ๋ ๋์ผํ MySingletonViewController์๋ค๊ฐ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ์ ์ดํด๋ณด์. ๋ง์ฐฌ๊ฐ์ง๋ก LLDB๋๋ฒ๊ฑฐ๋ฅผ ํตํด์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ์ ์ดํด๋ณผ ๊ฒ์ด๋ค.
class MySingletonViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let firstObject = MySingleton.shared
let secondObject = MySingleton.shared
}
}
breakpoint๋ฅผ ๊ฑธ์ด์ฃผ๊ณ ๋๋ฒ๊น ์ ํด๋ณด๋ฉด?
์ง์, ์ด๋ ๊ฒ ๋๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ์ด ๊ฐ๋ค. ์ด๋ฏธ fisrtObject์์ ์์ฑ๋์ด ์ฌ๋ผ๊ฐ์๋ MySingleton์ secondObjcect๋ ์ฌ์ฉํ๊ณ ์๋ค. ์ด๋ ๊ฒ ์ด๋ฏธ ์ฌ๋ผ๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์๋ ๊ฐ์ฒด๋ฅผ ์ง์์ ์ผ๋ก ์ฌ๋ฌ๋ฒ ์ฌ์ฉํ๊ฒ ํ๋ ๊ฒ์ด ๋ฐ๋ก ์ฑ๊ธํค ํจํด์ด๋ค.
โซ๏ธ ์ฑ๊ธํค ํจํด ์ฐ๋ ์ด์
๐ ์ฅ์
์ด๋ ๊ฒ ํ๋์ ๋ฉ๋ชจ๋ฆฌ์ ์๋ ๊ฐ์ฒด๋ฅผ ์ง์์ ์ผ๋ก ์ฌ์ฉํจ์ผ๋ก์จ ๊ฐ์ง๋ ์ฅ์ ์, ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํ ์ ์๋ค๋ ๊ฒ์ด๋ค.
๋ํ ์ฑ๊ธํค์ผ๋ก ๊ตฌํํ ์ธ์คํด์ค๋ '์ ์ญ'์ด๋ฏ๋ก, ๋ค๋ฅธ ํด๋์ค์ ์ธ์คํด์ค๋ค์ด ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ ์ ์๋ค๋ ๊ฒ์ด ์ฅ์ ์ด๋ค.
๐ ์ฃผ๋ก ์ธ์ ์ฐ๋์ฌ?
์ฃผ๋ก ๊ณตํต๋ ๊ฐ์ฒด๋ฅผ ์ฌ๋ฌ๊ฐ ์์ฑํด์ ๊ฐ์ด ์จ์ผํ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉํ๋ค. ์๋ฅผ๋ค์ด.,, ํ๋์ Manager๋ฅผ ๋ง๋ค์ด๋๋๋ค๊ฑฐ๋? ์ด๋ฐ๊ฒฝ์ฐ.. DB์์๋ ์ค๋ ๋ํ, ๋ก๊ทธ๊ธฐ๋ก ๊ฐ์ฒด ๋ฑ์์ ์ฌ์ฉํ๋ค.
โซ๏ธ ์ฑ๊ธํค ํจํด์ ๋จ์
์ฑ๊ธํค ์ธ์คํด์ค๊ฐ ํผ์ ๋๋ฌด ๋ง์ ์ผ์ ํ๊ฑฐ๋, ๋ง์ ์์ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ์ํค๋ฉด ๋ค๋ฅธ ํด๋์ค๋ค์ ๊ฒฐํฉ๋๊ฐ ๋์์ง๋ค. ์ด๋ ๊ฒ ๋๊ฒ ๋๋ฉด ๊ฐ์ฒด ์งํฅ ์ค๊ณ ์์น ์ค์ '๊ฐ๋ฐฉ ํ์ ์์น (Open Closed Principle, OCP)'๋ฅผ ์๋ฐํ๊ฒ ๋๋ค.
OCP๋ ๊ธฐ์กด์ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ์ง ์์ผ๋ฉด์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ์๋๋ก ์ค๊ณํด์ผํ๋ค๋ ์์น์ด๋ค. ๊ณ ๋ก, ํ์ฅ์ ๋ํด์๋ ๊ฐ๋ฐฉ์ ์ด๊ณ , ์์ ์ ๋ํด์๋ ํ์์ ์ด์ด์ผ ํ๋ค. ์ฝ๋ ์ฌ์ด์ ๊ฒฐํฉ๋๊ฐ ๋์์ง๊ฒ ๋๋ฉด, ์ ์ง๋ณด์๊ฐ ํ๋ค์ด์ง๊ณ , ํ ์คํธ๋ ์ํํ๊ฒ ์งํํด์ฃผ๊ธฐ ์ฝ์ง ์๋ค.
๋ํ ๋ฉํฐ ์ค๋ ๋ ํ๊ฒฝ์์ ๋๊ธฐํ ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ์ง ์์์ ๋, ์ธ์คํด์ค๊ฐ ๋๊ฐ ์ด์ ์์ฑ๋๋ ๋ฌธ์ ๋ ๋ฐ์ํ ์ ์๋ค. ๋ฐ๋ผ์ ์ฑ๊ธํค ํจํด์ ๋ฐ๋์ ์ฌ์ฉํด์ผํ๋ ์ํฉ์ด ์๋๋ฉด, ์ง์ํ๋๊ฒ์ด ์ข๋ค๊ณ ํ๋ค.
โ Singleton Pattern์ ๋ง์ด ์ฌ์ฉํ๋ฉด, ์ฑ ํผํฌ๋จผ์ค์ ์ํฅ์ ์ฃผ๋๊ฐ?
์ ํ ๋๋ฒจ๋กํผ ์์นด๋ฐ๋ฏธ์์๋ ์ ํ ์ง์๋ค๊ณผ ๋ง์ ๋ํ๋ฅผ ๋๋ ์ ์๋ค. (๋ด๊ฐ ์์ด๋ฅผ ๋ชปํด์ ์ ๊ทน์ ์ธ ์ํต์ ๋ชปํ๋ค๋๊ฒ ์ ๋ง,, ์ธ์์ ํ์ด๋ค. ์ ํ ๋ณธ์ฌ ๊ฐ๋ฐ์๋ค์ด๋ ์ด์ผ๊ธฐํด๋ณผ ์ ์๋ ์ข์ ๊ธฐํ๊ฐ ๋ง์๋๋ฐ!)
์,, ๊ฑฐ๊ธฐ์ ๋์๋ ์ฃผ์ ์ค ํ๋๊ฐ ๋ฐ๋ก ์ด์ฃผ์ ์๋ค. ์์ง ์ฑ๊ธํค์ผ๋ก ์ฑ์ ๊ฐ๋ฐํด๋ณธ ๊ฒฝํ์ด ๋ง์ง ์๊ธฐ ๋๋ฌธ์ ๋ช ํํ๊ฒ ์ดํด๋ ์๊ฐ์ง๋ง, ์ผ๋จ ์ง๊ธ๊น์ง ์ดํดํ ๋ฐ๋ก๋,,,
- cpu๊ด์ ์์ ๋ณผ ๋, ์ฑ๊ธํค ํจํด์ ๋ฐ๋ณต์ ์ผ๋ก ์กฐํํ๋ ๋งค์ฐ ๋น๋ฒํ call-site๊ฐ ์๋ ํ, ์ฑ๊ธํค ํจํด์ด ์ฑ ํผํฌ๋จผ์ค์ ๋ฌธ์ ๊ฐ ๋ ์ ์๋ค. ์ด๋ฐ ๊ฒ์ ์ฑ์ด ์คํ๋๋ ์๊ฐ๊ณผ ๊ด๋ จ์ด ์์ ๊ฒ์ด๋ค.
- ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ๊ด์ ์์ ์ฑ๊ธํค ํจํด์ ์์์ด ์กด์ฌํ ์ ๋ฐ์ ์๋ค. ๊ทผ๋ฐ, ์ด ์ฑ๊ธํค๋ค์ด ์ ์ ์ปค์ง๋ฉด ๋น์ฐํ ๋ฌธ์ ๊ฐ ๋ ์ ์๋ค.
- ๋ฉ๋ชจ๋ฆฌ ๊ทธ๋ํ ๋๋ฒ๊ฑฐ๋ฅผ ํตํด์ ์ฑ์ด ์คํํ๊ณ ์๋ ๋ฉ๋ชจ๋ฆฌ๋ค๊ณผ, ์ฑ๊ธํค๊ณผ ๊ด๋ จ๋ ์ ์ญ๋ณ์๋ค์ ๋ชจ๋ํฐ๋งํด๋ณด๋ ๊ฒ๋ ์ฑ์ ํผํฌ๋จผ์ค๋ฅผ ์ดํด๋ณด๋ ๊ฒ์ ๋์์ด ๋ ๊ฒ์ด๋ค.
๋ผ๋ ๋ต๋ณ์ธ๋ฐ,,, ๋๊ฒ ๋ช
์พํ ํด๋ต์ด๋ผ๊ณ ๋ค ํ๋๋ฐ ๋๋ ์ฌ์ค ์์ง ์ ๊ณต๊ฐ์ด ์๋๋ค.
๊ทธ๋ฅ, ์ด์จ๋ ์ฑ๊ธํด ํจํด์ด ์ปค์ง๋ฉด ๋น์ฐํ ๋ฌธ์ ๊ฐ ๋๋ ๋ถ๋ถ์ธ๊ฑฐ๊ณ , ์ฑ์ ๊ฐ๋ฐํ๊ณ ๋ฉ๋ชจ๋ฆฌ์ ์ธ ๊ด์ ์์ ์ฑ๊ธํคํจํด์ ์์จ ์ ์๋ ์กด์ฌ๋ ์๋๋, ์ ๋ชจ๋ํฐ๋งํ๊ณ ์ฑ์ ์ต์ ํ์์ผ์ ๊ฐ๋ฐํด๋ผ? ์ด๋ฐ๋ป์ผ๋ก ๋ฐ์๋ค์๋ค.
๋ ๊ณต๋ถํ๊ณ ๋ค์ ํด๋น ๋ต๋ณ์ ์ดํด๋ด์ผ์ง... (ํด๋น ๋ต๋ณ์ ์ ํด์๋๋ก , ์๊ฐ๋๋ก ์ฌ๊ตฌ์ฑํ ๋ต๋ณ์ ๋๋ค. ์ค์ ๋ก ์์ด๋ก ๋ต๋ณํด์ฃผ์ จ๊ณ ,,, ์๋ณธ ๋ต๋ณ์ ์ ํ ์์นด๋ฐ๋ฏธ ๋ด๋ถ์๋ฃ๋ก ์ ์ถ์ด ๋ถ๊ฐํฉ๋๋ค ๐ซ )
์ด๋ ๊ฒ ์ฑ๊ธํค ํจํด์ ๋ํด์ ์ดํด๋ดค๋ค. ์ฌ์ค ์์ง ์ฑ๊ฐ๋ฐ์ ๋ํ ๊ฒฝํ์ด ๋ง์ง ์์ ํฐ๋ผ, ์ ๊ณต๊ฐ์ ๋์ง ์๋๋ค. ํนํ, ์ฑ๊ธํค ํจํด์ผ๋ก ๊ตฌํํด๋ณด๋ ๊ฒ๋ ์ค์ํ์ง๋ง, ๋ง์ง๋ง ์ง๋ฌธ์ฒ๋ผ '์ฑ ํผํฌ๋จผ์ค์ ์ด๋ป๊ฒ ์ํฅ์ ์ฃผ๋๊ฐ'์ ๊ฐ์ ์ง๋ฌธ๋ค์ ๋ํด์ ๊น๊ฒ ๊ณ ๋ฏผํด๋ณผ ํ์๊ฐ ์์ ๊ฒ ๊ฐ๋ค.
'Computer > Design Pattern' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋์์ธ ํจํด] (iOS) MVC ํจํด์ MVVMํจํด์ผ๋ก ๋ฐ๊ฟ๋ณด๊ธฐ (feat. Combine) (0) | 2023.02.07 |
---|---|
[๋์์ธํจํด] (iOS) ๋์์ธ ํจํด์ด๋? ๊ฐ์ ๋ฐ ๋ถ๋ฅ ๋ฐฉ๋ฒ! (0) | 2022.09.27 |