TIL_20180122 ~ 20180128
22 Jan 2018 | TIL2018.01.22
- ์นด๋๊ฒ์ step5 ์ง์ฝ๋ฉ
- ํฌ์ปค๊ฒ์์ ์๊ณ์ฐ ํ๋ฆ ์ค๊ณํจ : Hands๊ตฌ์ฑ, ๊ณ์ฐ๋ฐฉ๋ฒ ๋ฑ
- ๊ณ ์ฐจํจ์ reduce (์ฐธ๊ณ ๋งํฌ_๋์์ ๋ง์ด ๋ฐ์๋ stackoverflow ๊ธ)
- enum comparable ๊ตฌํ - rawValue์ hashValue ์ด์ฉ. ์นด๋ ๋์๋ฅผ ๋น๊ตํ ๋ ์ฌ์ฉํจ.
2018.01.23
- ์นด๋๊ฒ์ step5 PR๋ณด๋ด๊ธฐ
- comparable, equatable enum์ ๊ตฌํ > rawValue์ hashValue๋ก ๊ตฌํํจ
- hands ํด๋์ค๋ฅผ PokerHands ์ด๋ฆ๋ฐ๊พธ๊ธฐ
- ํ๋ฆ์ ๋ํ ์์ธ๊ตฌํํ๊ธฐ - ok
- PR์ฑ๊ณต!
2018.01.24
- ์นด๋๊ฒ์ step5 ํผ๋๋ฐฑ ์ฒ๋ฆฌ
- private var denomination ์๋ฌ - ํด๋ก์ ์์ denomination์ ์จ์ ์๊ธด๊ฒ์ด์์! (ํด๋ก์ ์์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ฉด ์ด๋์ง ์ปดํ์ผ๋ฌ๊ฐ ์ ํํ ๋ชจ๋ฅด๋๊น ๋ฒ๊ทธ๊ฐ ์๊ธด ์์น๋ฅผ ์๋ ค์ฃผ์ง ์์์, ์ฐพ๋๋ฐ ์ข ์ ๋ฅผ ๋จน์๋คใ ใ )
- comparable ์ฌ์ฉํด์ ์นด๋ ๋น๊ต
- getter๋ฉ์๋ ๊ตฌํํ ๋ ๋ค์ด๋ฐ
- get์ ์ฐ์ง๋ง๋ผ๋๋ป์ ๋ฉ์๋ ์ด๋ฆ์ get์ ์ฐ์ง ๋ง๋ผ๋๊ฒ ์๋๋ผ getter๋ฅผ ๋ง๋ ๋ค๋๊ฒ ์์ฒด๊ฐ ์์ฑ๊ฐ์ ๊ฐ์ ธ์์ ๋ค๋ฅธ ๊ณณ์์ ์ด๋ ํ ๋์์ ํ๊ณ ๋น๊ต๋ฅผ ํ๋ค๋ ๋ป์ ๋ดํฌํ๊ณ ์๊ธฐ๋๋ฌธ์,
card.isSameSuit()
์ฒ๋ผ ๋ด๋ถ์์ ๋น๊ตํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌํดํด์ฃผ๋ ๋ฉ์๋๊ฐ ์์ด์ผํ๋ค๋๊ฒ. ๋ค๋ง Cardํด๋์ค์์ ๊ตฌํํ comparable ๋ฉ์๋๋ฅผ ๊ตฌํํ ๋ ์๋์ฒ๋ผ hashValue๋ rawValue์ ์ ๊ทผํ๋๋ฐ, ์ด๊ฒ๋ํ ์์๊ฐ๋ ์ธ Cardํด๋์ค์์ suit๋ denomination์ ์์ฑ๊ฐ์ ๊ฐ์ ธ์์ ์ฐ๋๊ฑฐ๋๊น, suit๋ denomination์์ฑ์์ comparable์ ๊ตฌํํ๊ณ Cardํด๋์ค์ ๋ฉ์๋์์.hashValue / .rawValue
๋ก ์ ๊ทผํ๋๊ฒ์ ์ง์ธ ์ ์๋ค. ```Swift // Before // Card.swift func isSameSuit(previous: Card) -> Bool { return self.suit.hashValue == previous.suit.hashValue }
// After add Comparable to enum suit
// suit์์๋ hashValue์ ์ ๊ทผํ์ฌ ๋ฉ์๋ ๊ตฌํํด๋ ๋จ. enum Suit: String, EnumCollection, Comparable { case heart = โโฅ๏ธโ case diamond = โโฆ๏ธโ case clover = โโฃ๏ธโ case spade = โโ ๏ธโ
static func <(lhs: CardDeck.Suit, rhs: CardDeck.Suit) -> Bool { return lhs.hashValue < rhs.hashValue } static func ==(lhs: CardDeck.Suit, rhs: CardDeck.Suit) -> Bool { return lhs.hashValue == rhs.hashValue }
// Card.swift func isSameSuit(previous: Card) -> Bool { return self.suit == previous.suit }
```swift // Before // Card.swift func isContinuous(previous: Card) -> Bool { return (self.denomination.rawValue -1) == previous.denomination.rawValue } // ScoreChecker.swift private func isStraight(_ cards: [Card]) -> Bool { var count = 0 for i in 1..<cards.count { if cards[i].isContinuous(previous: cards[i-1]){ count += 1 } } return count >= 4 } // After // CardDeck.swift enum Denomination: Int, CustomStringConvertible, EnumCollection { case one = 1, two, three, four, five, six, seven, eight, nine, ten, eleven, twelve, thirteen var description: String { switch self { case .one: return "A" case .eleven: return "J" case .twelve: return "Q" case .thirteen: return "K" default: return String(self.rawValue) } } // Denomination์๋ ์ด๋ ๊ฒ ๋ด๋ถ์ `rawValue๊ฐ - 1`๋ก ๋น๊ตํ๋ ๋ฉ์๋๋ฅผ ๋ง๋ค๊ณ func isContinuous(previous: CardDeck.Denomination) -> Bool { return (self.rawValue - 1) == previous.rawValue } } //Card.swift // Card์์๋ denomination์ rawValue๊น์ง ์ ๊ทผํ์ง์๊ณ , // ScoreChecker์์ ๋๊ฒจ๋ฐ์ card๋ฅผ denomination๊น์ง๋ง ์ ๊ทผํด์ Enum // `denomination.isContinuous`์ ์ธ์๋ฅผ ๋๊ธด๋ค. func isContinuous(previous: Card) -> Bool { return self.denomination.isContinuous(previous: previous.denomination) }
- get์ ์ฐ์ง๋ง๋ผ๋๋ป์ ๋ฉ์๋ ์ด๋ฆ์ get์ ์ฐ์ง ๋ง๋ผ๋๊ฒ ์๋๋ผ getter๋ฅผ ๋ง๋ ๋ค๋๊ฒ ์์ฒด๊ฐ ์์ฑ๊ฐ์ ๊ฐ์ ธ์์ ๋ค๋ฅธ ๊ณณ์์ ์ด๋ ํ ๋์์ ํ๊ณ ๋น๊ต๋ฅผ ํ๋ค๋ ๋ป์ ๋ดํฌํ๊ณ ์๊ธฐ๋๋ฌธ์,
2018.01.25
์นด๋๊ฒ์ step5 Hands ๊ฐ์ฒด
- ์์ฑ: PokerHands enum, Card(TopCard)
- ์ฌ์ฉ์๊ฐ ๊ฐ์ง hands๋ณ๋ก TopCard๊ฐ ์์ด์ผํ๊ณ , ๊ทธ hands์ค์์๋ ์ ์ผ ํฐ ์ ์๋ฅผ ๊ฐ์ง hands์ ํ์นด๋๋ง ์ ํจํ์๋ฏธ์.
- ๋ฐ๋ผ์ [PokerHands]๋ก ์ ์๋ฅผ ๊ณ์ฐํ๊ณ ํํํํ๋ก ํ์นด๋๋ฅผ ๊ฐ์ง๊ณ ์๋๊ฑธ ๋น๊ตํ๋๊น ๋น๊ตํ๊ณ ๋ง๋ ๊ฐ์ ๊ฐ์ ธ์ค๊ธฐ ํ๋ค์๋ค.
- onepair 1๊ฐ(2ํํธ), nopair 3๊ฐ(10ํํธ,5ํด๋ก๋ฒ,6๋ค์ด์)์ธ 5์คํฐ๋์์ onepair์ ํ์นด๋์ธ 2ํํธ์ ๊ฐ์ค์น์ ์๊ฐ ๊ฐ์ ธ์์ ธ์ผํ๋๋ฐ nopair์ค์ ํ์นด๋์ธ 10์ ๊ฐ์ค์น์ ์๊ฐ ๊ฐ์ ธ์์ ธ์ ๊ณ์ฐ๋จ.
- ์๋ฏธ์๋ hands์ ํ์นด๋๋ก ์ ์๋ฅผ ๊ณ์ฐํ ๋ ๊ฐ์ค์น๋ฅผ ๊ณฑํ๋ค.
- ์ ์๊ณ์ฐํ๋ ๊ฐ์ฒด์์๋ ๊ธฐ์กด์[PokerHands]๋ก ํ๋๊ฑธ [Hands]๊ฐ์ฒด๋ก ๋น๊ต. comparable๊ตฌํํด์ [Hands]๋ฅผ sortํ๊ณ ๊ฐ์ฅ ํฐ ํ์ด(or ํ๋ฌ์,์คํธ๋ ์ดํธ)์ ํ์นด๋๋ก ์ต์ข ์ค์ฝ์ด์ ๊ฐ์ค์น๋ฅผ ๊ณฑํด์ค๋ค.
- ์์ฑ์ ๊ดํธ์ ๋๊ฐ ๋ฃ์ด์ ๋ฐฐ์ด๋ก ๋ฃ์๊ฑธ ํ์ํํ๋ค๋ฉด ์๋์ ๊ฐ์.
- hands๋ฐฐ์ด: [(PokerHands:TopCard),(PokerHands:TopCard),(PokerHands:TopCard)]: ํ์ฌ๋์ด ์ด๋ ๊ฒ hands๋ฐฐ์ด์๊ฐ์ง๊ณ ์๊ณ , ScoreChecker์์ final์ ์๊ณ์ฐํ ๋ ์ด [hands]๋ฅผ ๊ฐ์ง๊ณ ๊ณ์ฐํ๋ฉด๋ ๋ฏ. (๋ง์ฝ์ ์ด๋ ๊ฒ ๊ตฌํํ๋ฉด ๋ชจ๋ ์ ์ ๊ฐ ๋ค ๋ ธํ์ด์ผ๋ ํ์นด๋๋ก ๋น๊ตํ ์์๊ฒ๋จ.)
- ์ ๋ถ ๋ค ๋ ธํ์ด์ธ๊ฒฝ์ฐ๋ ์ ์ผ ํฐ ํ์นด๋๋ฅผ ๊ฐ์ง ๋ ธํ์ด๋ก ๊ณ์ฐํ๋ค. ***
- ์คํธ๋ ์ดํธ๋ ํ๋ฌ์์ธ๊ฒฝ์ฐ๋, ํ์นด๋๋ฅผ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ ๋ฐ๋ก ๋ง๋ ๋ค.
- hands๊ฐ์ฒด์ PokerHands์์ฑ์ด ์คํธ๋ ์ดํธ๋ฉด ์คํธ๋ ์ดํธ ํจ์ ํ์นด๋๋ฅผ ๊ตฌํ๊ณ (์ด๊ฑด ScoreChecker์์ ์คํธ๋ ์ดํธํ๋ฌ์์ฒดํฌํ๋๋ฐ์ํด์ผํจ)
- PokerHands์ ์์ฑ์ด ํ๋ฌ์์ด๋ฉด suit์ ๋น๊ตํด์ ํ์นด๋๋ฅผ ๊ตฌํ๋ค.
// hands.swift if self.PokerHands == .straight { card.sorted() // hands๋ cards๋ฅผ ๋ชจ๋ฅด๋๊น sort๋ ScoreChecker์์ ํด์ผํ ์ง๋๋ชจ๋ฅด๊ฒ ๋ค...................... }
- ํ ์คํธ์ฝ๋์ ์ค์์ฑ์ ์์๋ค : TDD์ ์ค์์ฑ~~~
2018.01.26
- ์ํ๊ธฐstep1
- ์๋ฃ์๋ผ๋ฆฌ ์์์ผ๋ก ๊ตฌํํ๊ณ CustomStringConvertible๊ตฌํํด์ ์ถ๋ ฅ
- Dataํด๋์ค ์ฌ์ฉ
- ํ์
๊ณํ์ ํจ๊ณผ์ ์ผ๋ก ์ง๋ ๋ฐฉ๋ฒ์ ์๋์ ๊ฐ๋ค๊ณ ํ๋ค.
- what: ๊ณต๋ถํ ๊ฑฐ๋ฆฌ๋ค
- how long: ์ผ๋ง๋ ๊ฑธ๋ฆด์ง์์, ์ธ์ ๊น์ง ํ ๊ฑด์ง
- how to: ์ด๋ป๊ฒํ ๊ฑด์ง - ์ด๋ป๊ฒ ๊ณต๋ถํ ๊ฑด์ง์ ๋ํ ํ๋๋ค
2018.01.27
- ์ํ๊ธฐ step1 ํผ๋๋ฐฑ ๋ฐ์
- MyDate๊ฐ์ฒด ์์ฑ
2018.01.28
- ์ผ์์ผ - ๋จธ์ง ๋์ง ์์์ด๋ ๋ฐฉํ์ด ์ผ๋ง ์๋จ์๊ธฐ์ ๋ฏธ๋ฆฌ ์ํ๊ธฐ step2์งํํจ.
Comments