- MVC
- Model
- Struct vs Class
- Sequence
- static
- lazy
- indicies
๊ณต๊ฐ API๊ฐ ๋ญ์ง ๋จผ์ ์๊ฐํด์ผํ๋ค.
์ด๋ ๊ฒ ๋์์ธ ํ๋ฉด ๊ทผ๋ณธ์ ์ผ๋ก ๋ญ ํ๋์ง ์๊ณ ์ด๋ป๊ฒ ์ฌ์ฉํ ์ง ์๊ฐํ๊ฒ ๋๊ธฐ ๋๋ฌธ์ ์ด๋ป๊ฒ ๋์์ธ ํ ์ง ๋ช ๋ฃํ๊ฒ ์๊ฐํ ์ ์๋ค.
struct Card {
var isFaceUp = false
var isMatched = false
var identifier: Int
}
์ฌ๊ธด Model์ด๋ฏ๋ก ์ด๋ชจํฐ์ฝ์ด๋ ์ด๋ฏธ์ง ๊ฐ์ ํ๋ฉด์ ์ด๋ป๊ฒ ๋ณด์ฌ์ง์ง์ ๊ดํ ์ ๋ณด๋ ๋ด๊ณ ์์ผ๋ฉด ์๋๋ค.
Struct
- ์์์ฑ x
- value type
Class
- ์์์ฑ o
- reference type
Struct
๋ ๊ฐ์ ๋ณต์ฌํ๋๋ฐ, swift๋ ๋ณต์ฌํ ๋ ๋งค์ฐ ๋๋ํ๋ค, ๋ชจ๋ ๋ณต์ฌํ์ง ์๊ณ ๋๊ตฐ๊ฐ ๋ด์ฉ์ ๋ณ๊ฒฝํ์ ๋๋ง ์ค์ ๋ก ๋ณต์ฌํ๋ ์ ๋ฌ๋ฐฉ์ - ์ฐ๊ธฐ ์ ๋ณต์ฌ
Class
๋ ํ์ ์๋ฃํ์ด ๋ด๊ฒจ์๊ณ ๊ทธ ์๋ฃํ ํฌ์ธํฐ๋ฅผ ์ธ ์ ์๋ค. ์ฌ๋ฌ๊ตฐ๋ฐ์ ์ฌ์ฉํ๋ฉด ์ค์ ๊ทธ ์๋ฃํ์ ๋ณด๋ด๋๊ฒ ์๋๋ผ ๊ทธ ์๋ฃํ์ ํฌ์ธํฐ๋ฅผ ์ ๋ฌํ๋ค. ๋ฐ๋ผ์ ์ฝ๋ ์์ ํ ์ค๋ธ์ ํธ๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๊ฐ ์๋ฉ ์์ ์ ์๋ค.
Class
๋ ๋ชจ๋ ๊ฐ์ด ์ด๊ธฐํ๋๋ฉด ์๋์ผ๋ก init์ ๊ฐ์ง๊ฒ ๋๋ค.
struct
๊ฐ ๊ฐ๋ ๊ธฐ๋ณธ init์ ๋ชจ๋ ๋ณ์๋ฅผ ์ด๊ธฐํํ๋ค. ์ ์์ ์ด๋ฏธ ์ด๊ธฐํํ๊ฒ ์๋๋ผ๋
์ฒซ๋ฒ์งธ ํญ๋ชฉ์์ ์์ํด ๋ค์์ผ๋ก ๊ฐ ์ ์๋ ๋ชจ๋ ๊ฒ์ Sequnce๋ผ๊ณ ํ๋ค.
Array, String์ sequnce๋ผ๊ณ ํ ์ ์๋ค.
static method๋ ํน์ ํด๋์ค ์์ ์์ง๋ง ํน์ ํด๋์ค์๊ฒ ๋ณด๋ผ ์ ์๋ค. ํน์ ํด๋์ค๋ static์ ์ดํดํ ์ ์๋ค. ์ค์ง ํด๋์ค ํ์
๋ง ์ดํดํ ์ ์๋ค. ์ด๋ ๊ฒ ํ์
์์ฒด์๊ฒ ์์ฒญํ๋๊ฑธ ์ ์
์ด๋ผ๊ณ ํ๋ค.
struct Card {
var isFaceUp = false
var isMatched = false
var identifier: Int
static var identiferFactory = 0
static func getUniqueIdentifier() -> Int {
//Card.identifierFactory += 1
//return Card.identifierFactory
// Card Class ์ ์ด๋ฏ๋ก ์์ฒ๋ผ ์ ์ง ์๊ณ ํด๋์ค๋ฅผ ์๋ตํ๋ค.
identiferFactory += 1
return identiferFactory
}
func init() {
identifier = Card.getUniqueIdentifer
}
}
Swift ์์๋ ์ด๋ค ๋ณ์๋ ๋ฉ์๋๋ ์ฌ์ฉํ๊ธฐ ์ ์ ๋ฐ๋์ ์ด๊ธฐํ๊ฐ ๋์ด์ผ ํ๋ค.
์๋์ ๊ฐ์ด ์ด๊ธฐํ๋์ง ์์ ๋ณ์๋ฅผ ๋ค๋ฅธ ๋ณ์๋ฅผ ์ด๊ธฐํ ํ๋ ๋์ค์ ์ฌ์ฉํ ์ ์๋ค๋ ๋ฌธ์ ๊ฐ ์๊ธด๋ค.
์ด๋ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ด lazy
์ด๋ค ๋ณ์๋ฅผ lazy๋ก ๋ง๋ค๋ฉด ์ด ๋ณ์๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ๊น์ง๋ ์ด๊ธฐํํ์ง ์๋๋ค.
์ค์ ๋ก ์ด๊ธฐํ๋์ง๋ ์์์ง๋ง ์ด๊ธฐํ๋์๋ค๊ณ ์ณ์ฃผ๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ์์ด ์ฌ์ฉํ ์ ์๋ค.
// Error!
// Concentration๊ณผ cardButtons๋ ๋ชจ๋ ์ด๊ธฐํ ๋์ด์ผ ํ๋ ๋์
// game์ ์ด๊ธฐํ ํ๊ณ ์๋ ๋์ค์ ์ด๊ธฐํ๋์ง ์์ ๋ณ์๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
var game = Concentration(numberOfPairsOfCards: (cardButtons.count + 1)/2)
// Ok
// ์ฌ์ฉํ๊ธฐ ์ ๊น์ง ์ค์ ๋ก ์ด๊ธฐํ๋์ง ์์ง๋ง ์ด๊ธฐํ๋์๋ค๊ณ ์ณ์ค๋ค.
lazy var game = Concentration(numberOfPairsOfCards: (cardButtons.count + 1)/2)
ํ์ง๋ง lazy๊ฐ ๋๋ฉด didSet๊ณผ ๊ฐ์ Property Observer๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
indicies๋ ๋ฐฐ์ด์ ๋ฉ์๋๋ค. ๋ฐฐ์ด์ ๋ชจ๋ ์ธ๋ฑ์ค์ ๋ฒ์๋ฅผ ๋ฆฌํดํด์ค๋ค. CountableRange ํ์ ์ด๋ค.