ํฐ์คํ ๋ฆฌ ๋ทฐ
Head First Design Pattern - ์ 8์ฅ ํ ํ๋ฆฟ ๋ฉ์๋ ํจํด
ggasoon2 2024. 2. 15. 01:36
ํ ํ๋ฆฟ ๋ฉ์๋ ํจํด
- ์๊ฐ
์์ ์์ค์์ ์๊ณ ๋ฆฌ์ฆ ๊ตฌ์กฐ๋ฅผ ์ ์ํ๊ณ
ํ์ ํด๋์ค์์ ๊ตฌ์ฒด์ ์ธ ๋จ๊ณ๋ฅผ ๊ตฌํํ๋ ํจํด์ ๋๋ค.
- ์ฅ์
์ฝ๋ ์ค๋ณต์ ์ค์ด๊ณ ์ ์ฐ์ฑ์ ๋์ผ ์ ์๋ค.
- ์์
class Coffee {
func boilWater() { print("๋ฌผ ๋์ด๋ ์ค") } // ๊ณตํต
func brew() { print("ํํฐ๋ฅผ ํตํด ์ปคํผ๋ฅผ ์ฐ๋ ค๋ด๋ ์ค") }
func pourInCup() { print("์ปต์ ๋ฐ๋ฅด๋ ์ค") } // ๊ณตํต
func addCondiments() { print("์คํ๊ณผ ์ฐ์ ๋ฅผ ์ถ๊ฐํ๋ ์ค") }
}
class Tea {
func boilWater() { print("๋ฌผ ๋์ด๋ ์ค") } // ๊ณตํต
func brew() { print("์ฐจ๋ฅผ ์ฐ๋ ค๋ด๋ ์ค") }
func pourInCup() { print("์ปต์ ๋ฐ๋ฅด๋ ์ค") } // ๊ณตํต
func addCondiments() { print("๋ ๋ชฌ์ ์ถ๊ฐํ๋ ์ค") }
}
์ค๋ณต๋๋ ์ฝ๋
func boilWater() { print("๋ฌผ ๋์ด๋ ์ค") } // ๊ณตํต
func pourInCup() { print("์ปต์ ๋ฐ๋ฅด๋ ์ค") } // ๊ณตํต
// ํ
ํ๋ฆฟ ๋ฉ์๋๋ฅผ ํฌํจํ ์์ ์์ค ํด๋์ค
class Beverage {
final func prepareRecipe() {
boilWater()
brew()
pourInCup()
addCondiments()
}
func boilWater() { print("๋ฌผ ๋์ด๋ ์ค") } // ๊ณตํต
func brew() { fatalError("์๋ธํด๋์ค์์ ๊ตฌํํด์ผ ํจ") }
func pourInCup() { print("์ปต์ ๋ฐ๋ฅด๋ ์ค") } // ๊ณตํต
func addCondiments() { fatalError("์๋ธํด๋์ค์์ ๊ตฌํํด์ผ ํจ") }
}
// ํ์ ์์ค ํด๋์ค
class Coffee: Beverage {
override func brew() { print("ํํฐ๋ฅผ ํตํด ์ปคํผ๋ฅผ ์ฐ๋ ค๋ด๋ ์ค") }
override func addCondiments() { print("์คํ๊ณผ ์ฐ์ ๋ฅผ ์ถ๊ฐํ๋ ์ค") }
}
class Tea: Beverage {
override func brew() { print("์ฐจ๋ฅผ ์ฐ๋ ค๋ด๋ ์ค") }
override func addCondiments() { print("๋ ๋ชฌ์ ์ถ๊ฐํ๋ ์ค") }
}
let coffee = Coffee()
coffee.prepareRecipe()
let tea = Tea()
tea.prepareRecipe()
Beverage ์์ class์์ prepareRecipe(์๊ณ ๋ฆฌ์ฆ ๊ตฌ์กฐ)๋ฅผ ์ ์ํ๊ณ
ํ์ class์ธ Coffee์์ ๊ตฌ์ฒด์ ์ธ ๋จ๊ณ๋ฅผ ๊ตฌํํ๊ณ ์์ต๋๋ค
final func prepareRecipe() {
boilWater()
brew()
pourInCup()
addCondiments()
}
prepareRecipe func ์ด ๋ถ๋ถ์ด ์์ ์์ค์์์ 'ํ ํ๋ฆฟ ๋ฉ์๋' ์ ๋๋ค
ํ์ ํด๋์ค์์๋ ํน์ ์๋ฃ์ ๋ง๊ฒ brew()์ addCondiments() ๋ฉ์๋๋ฅผ ๊ตฌํํ๊ณ ์์ต๋๋ค
// ํ์ ์์ค์ ํด๋์ค
class Coffee: Beverage {
override func brew() { print("ํํฐ๋ฅผ ํตํด ์ปคํผ๋ฅผ ์ฐ๋ ค๋ด๋ ์ค") }
override func addCondiments() { print("์คํ๊ณผ ์ฐ์ ๋ฅผ ์ถ๊ฐํ๋ ์ค") }
}
class Tea: Beverage {
override func brew() { print("์ฐจ๋ฅผ ์ฐ๋ ค๋ด๋ ์ค") }
override func addCondiments() { print("๋ ๋ชฌ์ ์ถ๊ฐํ๋ ์ค") }
}
์ด๋ ๊ฒ ํ ํ๋ฆฟ ๋ฉ์๋ ํจํด์ ์ฌ์ฉํ ๊ฒฝ์ฐ
์๋ก์ด ์๋ฃ๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ๊ธฐ์กด ์๋ฃ์ ์๊ณ ๋ฆฌ์ฆ์ ๋ณ๊ฒฝํ ๋,
prepareRecipe() ๋ฉ์๋๋ฅผ ์์ ํ์ง ์์๋ ๋๋ค๊ณ ํฉ๋๋ค.
ํ ํ๋ฆฟ ๋ฉ์๋ ์ 'Hook'
- ์ ์
์ถ์ ํด๋์ค์ ์ ์ธ๋์ง๋ง ๊ตฌํ๋์ด์์ง ์๊ณ ์๋ฌด ์ฝ๋๋ ๋ค์ด์์ง ์์ ๋ฉ์๋
-> ์๋ธ ํด๋์ค์์ ํ์ํ ๋ ์ค๋ฒ๋ผ์ด๋ ํ๋ ๋ฉ์๋
ํ ํ๋ฆฟ ๋ฉ์๋ ์ค์ฉ
- ๊ตฌ์กฐ์ฒด ๋น๊ตํ๊ธฐ (์ ๋ ฌํ๊ธฐ)
๋ฐฐ์ด์ ์ ๋ ฌํ ๋ Array Struct ๋ด๋ถ์์ ์ ์๋ sort ๋ฉ์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.
let array2 = [4,3,5,2,1,6]
print(array2.sorted()) // [1, 2, 3, 4, 5, 6]
๋ง์ฝ ์๋ ๊ฐ์ ๊ตฌ์กฐ์ฒด๋ฅผ ์ ๋ ฌํ๋ ค๊ณ ํ ๊ฒฝ์ฐ
struct Person {
let name: String
let age: Int
}
let jh = Person(name: "์ฌํ", age: 30)
let tw = Person(name: "ํ์ํ", age: 31)
let array = [tw, jh]
print(array.sorted())
์ด๋ ๊ฒ sorted ๋ฉ์๋ ์ฌ์ฉ์,
sorted() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋
Person ๊ตฌ์กฐ์ฒด๊ฐ Comparable๋ฅผ ๋ฐ๋ผ์ผ ํ๋ค๊ณ ํฉ๋๋ค.
struct Person {
let name: String
let age: Int
}
extension Person: Comparable {
static func < (lhs: Person, rhs: Person) -> Bool {
return lhs.age < rhs.age
}
static func > (lhs: Person, rhs: Person) -> Bool {
return lhs.age > rhs.age
}
}
let jh = Person(name: "์ฌํ", age: 30)
let tw = Person(name: "ํ์ํ", age: 31)
let dk = Person(name: "๊ฐ๋๊ฒฝ", age: 30)
let sh = Person(name: "์กํ๋๋", age: 31)
let array = [dk, tw, sh, jh]
print(array.sorted())
sorted() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๊ณ ์ ํ๋
Person ๊ตฌ์กฐ์ฒด์์ Comparable ์ธํฐํ์ด์ค๋ฅผ ์ฑํ ํฉ๋๋ค.
*Comparable ์ธํฐํ์ด์ค - ์์ ์์ค์์ ์ ์๋ ํ ํ๋ฆฟ ๋ฉ์๋
๊ทธ๋ฆฌ๊ณ ํ์ ์์ค์ธ Person์์ < , > ์ ๋ํ ๋ฉ์๋๋ฅผ ์ ์ํด์ฃผ์์ต๋๋ค.
extension Person: Comparable {
static func < (lhs: Person, rhs: Person) -> Bool {
return lhs.age < rhs.age
}
static func > (lhs: Person, rhs: Person) -> Bool {
return lhs.age > rhs.age
}
}
<, > ๋ฉ์๋๋ฅผ ํ์์ ๋ง๊ฒ ๊ตฌํํฉ๋๋ค.
๊ฒฐ๊ณผ
๊ตฌ์กฐ์ฒด๋ฅผ ์ ๋ ฌํ๋ ๋ฐฉ๋ฒ์ ํตํด
ํ ํ๋ฆฟ ๋ฉ์๋ ํจํด์ ์์๋ณด์์ต๋๋ค.
+ ์ ๋ต ํจํด, ํ ํ๋ฆฟ ๋ฉ์๋ ํจํด์ ์ฐจ์ด์
๊ฐ์ฌํฉ๋๋ค.
- Total
- Today
- Yesterday
- rag llm pdf
- ๊ณต๋ถ ํ์ด๋จธ ์ดํ
- swift ์์ ์ฝ๊ธฐ
- swift network module
- ๋ ๋์ธ์ด
- swift urlsession ๊ณตํตํ
- chatgpt rag llm
- swift network refactoring
- swift ์๊ฐ
- swift filemanager get excel
- swift network ๊ณตํตํ
- swift get excel
- swift urlcomponent encode
- swift ๋คํธ์ํฌ ๋ชจ๋ํ
- swift ์์ ๊ฐ์ ธ์ค๊ธฐ
- ๋ ๋์ธ์ด ์ดํ
- llm pdf rag
- swift urlsession refactoring
- swift excel read
- swift urlsession module
- rag ๊ธฐ๋ฐ llm
- swift filemanager excel
- readysay
- llm csv
- ์๋์ํํธ ๋ ์ด์ธ์ด
- rag ๊ธฐ๋ฐ llm ์ฑ๋ด
- swift urlsession network module
- focus timer ์ดํ
- swift queryitem encode
- filemanager excel read
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |