ํฐ์คํ ๋ฆฌ ๋ทฐ
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
- swift ํ๊ฐ extension
- swift ์๊ฐ
- xcode ํจ์ ํ๋ฒ์ ์ ๊ธฐ
- xcode code ๋จ์ถ
- xcode ui code ์ง์ ๋ถ
- swift textview ํ๊ฐ
- swift textview ์๊ฐ
- fast build xcode
- swift uilabel ์๊ฐ
- xcode ํจ์ ์ ๊ธฐ
- swift ์๊ฐ Extension
- swift uilabel ํ๊ฐ
- swift ์ฑ ์ ๋ฐ์ดํธ
- ios ๊ฐ์ update
- xcode code snippet
- xcode ui code dirty
- reduce xcode build time
- swift line spacing extension
- swift code snippet
- xcode ์ฌ๋ฌ์ค ํธ์ง
- xcode mark ํ
- swift ๊ฐ์ ์ ๋ฐ์ดํธ
- swift fast build
- swift touch outside parentView
- xcode ๋จ์ถํค ๊ฟํ
- swift ๋ถ๋ชจ๋ทฐ ์ธ๋ถ์์ญ ํฐ์น
- swift ํ๊ฐ
- xcode ํ๋ฒ์ ์ฌ๋ฌ์ค ํธ์ง
- ios ์ฑ ์ ๋ฐ์ดํธ
- swift line spacing
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 | 31 |