๐ 1 . ์ฑ๊ธํค ํจํด
์ ์ผํ๊ฒ ํ๋๋ง ์กด์ฌํ๋ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ ์ถ์ ๋
ํน์ ํด๋์ค์ ์ธ์คํด์ค๊ฐ ์ฑ์ ์ฒด์์ ํ๋๋ง ์กด์ฌํ๊ณ
์ฑ ์ ์ญ์์ ๋ชจ๋ ์ ๊ทผํ ์ ์๋๋ก ํ๋ ๋์์ธ ํจํด์ด๋ค.
1. ๊ฐ๋ณ์ ์ธ ์ธ์คํด์ค๋ฅผ ์์ฑํ ํ์๊ฐ ์์
2. ๋จ ํ๋์ ์ธ์คํด์ค๋ฅผ ์ฌํ์ฉํด์ ์ฌ๋ฌ ๊ณณ์์ ํ์ฉํ ๋ ์ ํฉ.
์์น์๋น์ค, ๋ก๊น ์๋น์ค, UserDefaults ์ ์ฒด ๊ด๋ฆฌ ํด๋์ค, ๋คํธ์ํฌ ์ค๋ณต ๋ก์ง ๊ด๋ฆฌ ํด๋์ค ๋ฑ์ ์ฌ์ฉ ๊ฐ๋ฅ
static ํค์๋๊ฐ ๋ถ์ผ๋ฉด ์ ์ผ ๋จผ์ ํธ์ถ๋ ๋ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ๋ค.
์ฑ๊ธํค ๊ฐ์ฒด๊ฐ ๋ถ๋ฆฌ๊ณ ๋ ๋ค ์ฑ์ด ์ข ๋ฃ๋ ๋๊น์ง ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ ์๋ ์ํ์ด๊ธฐ ๋๋ฌธ์
ํธ์ถํ๋ ๋ชจ๋ ๋ถ๋ถ์ ๋จ ํ๋์ ์ธ์คํด์ค๋ฅผ ๋ฐ๋ผ๋ณด๊ณ ์ ๊ทผํ๋ค.
์ด๋, ๋ฉ๋ชจ๋ฆฌ์ ์ผ๋ก ์ํด๋ฅผ ๋ณด์ง ์๋์ง ๋ฐ๋์ ๊ณ ๋ คํด๋ณผ ๊ฒ.
class Singleton {
//static let์ผ๋ก ์ ์ธ
static let shared = Singleton() //static let ์ด๋ฆ = ๊ฐ์ฒด ์์ฑ()
var mbti = ""
private init(){} //์ถ๊ฐ์ ์ธ ๊ฐ์ฒด ์์ฑ ๋ชปํจ. ์๊ธฐ ์์ ์ ์ด๊ธฐํํด์ static let ๋ณ์์ ํ ๋น
func printInfo() {
print("mbti = \(mbti)")
}
}
Singleton.shared.printInfo() // ์ถ๋ ฅ: "" - ํด๋์ค์์ ํ๋์ ๊ฐ์ฒด๊ฐ ํ ์์ญ์ ์กด์ฌ
Singleton.shared.mbit = "ENFP"
Singleton.shared.printInfo() //์ถ๋ ฅ: "ENFP"
๐ 2. ์ฑ๊ธํค ํจํด๊ณผ ์์กด์ฑ ์ฃผ์ ๋น๊ต
์ฑ๊ธํค ํจํด
์ฅ์
์ ์ญ ์ ๊ทผ: ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒด์์ ๋จ์ผ ์ธ์คํด์ค์ ์ ๊ทผํ ์ ์์ด ๊ณตํต ๋ฆฌ์์ค๋ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ฌ์.
๋ฉ๋ชจ๋ฆฌ ์ ์ฝ: ํ๋์ ์ธ์คํด์ค๋ง ์์ฑ๋๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ค์ผ ์ ์์.
๊ตฌํ ์ฉ์ด์ฑ: ๊ตฌํ์ด ๊ฐ๋จํ๊ณ ์ง๊ด์ .
๋จ์
ํ ์คํธ ์ด๋ ค์: ์ ์ญ ์ํ๋ฅผ ๊ฐ์ง๊ธฐ ๋๋ฌธ์ ํ ์คํธ๊ฐ ์ด๋ ต๋ค. ํนํ, ์ํ๋ฅผ ์ด๊ธฐํํ๊ฑฐ๋ ๊ฒฉ๋ฆฌํ๋ ๊ฒ์ด ์ด๋ ค์ ๋จ์ ํ ์คํธ์์ ๋ฌธ์ ๊ฐ ๋ ์ ์์.
์์กด์ฑ ์จ๊น: ํด๋์ค ๊ฐ์ ์์กด์ฑ์ด ๋ช ํํ์ง ์์ ์ฝ๋์ ์ ์ฐ์ฑ๊ณผ ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง ์ ์์.
๋ฉํฐ์ค๋ ๋ฉ ์ด์: ๋ฉํฐ์ค๋ ๋ฉ ํ๊ฒฝ์์ ์ ์ ํ ์ค๊ณ๋์ง ์์ผ๋ฉด ๋๊ธฐํ ๋ฌธ์ ๋ฐ์ ๊ฐ๋ฅ.
์์กด์ฑ ์ฃผ์ (Dependency Injection)
์ฅ์
ํ ์คํธ ์ฉ์ด์ฑ: ์์กด์ฑ์ด ๋ช ํํ๊ฒ ๋๋ฌ๋๋ฏ๋ก ๋ชจ์ ๊ฐ์ฒด(mock)๋ฅผ ์ฌ์ฉํ ๋จ์ ํ ์คํธ๊ฐ ์ฌ์.
์ ์ฐ์ฑ ์ฆ๊ฐ: ์์กด์ฑ์ ์ธ๋ถ์์ ์ฃผ์ ๋ฐ๊ธฐ ๋๋ฌธ์ ๊ฐ์ฒด ๊ฐ์ ๊ฒฐํฉ๋๊ฐ ๋ฎ์์ง๊ณ , ์ฝ๋์ ์ ์ฐ์ฑ๊ณผ ์ฌ์ฌ์ฉ์ฑ ๋์.
๋ช ํํ ์์กด์ฑ: ํด๋์ค ๊ฐ์ ์์กด์ฑ์ด ๋ช ํํ๊ฒ ๋๋ฌ๋ ์ฝ๋์ ๊ฐ๋ ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ด ๋์.
๋จ์
๊ตฌํ ๋ณต์ก์ฑ: DI ์ปจํ ์ด๋๋ฅผ ์ค์ ํ๊ณ ๊ด๋ฆฌํ๋ ๊ฒ์ด ๋ค์ ๋ณต์ก.
๋ฐํ์ ์ค๋ฅ ๊ฐ๋ฅ์ฑ: ์์กด์ฑ์ ์ฃผ์ ํ๋ ๊ณผ์ ์์ ๋ฐํ์ ์ค๋ฅ๊ฐ ๋ฐ์ ๊ฐ๋ฅ.
๐ Reference
'๐ iOS > Patterns & Arch' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ Architecture ] MVVM ํจํด (0) | 2024.08.02 |
---|---|
[Design Patterns] ์ต์ ๋ฒ ํจํด (Observer Pattern) (0) | 2024.08.01 |
[Design Patterns] ๋ธ๋ฆฌ๊ฒ์ดํธ ํจํด(Delegate Pattern) (0) | 2024.07.08 |
[ Architecture ] MVC ํจํด (0) | 2024.06.14 |