29 Jan 2018
|
TIL
2018.01.29
- ์ํ๊ธฐ step2 PR๋ณด๋ด๊ธฐ
- step1์ฒ๋ฆฌ์ค์ผ๋ก, ๋จธ์ง๋๋ฉด ์ฃผ๋ง์ ์ค๊ณํด๋จ๋ ๊ฒ step2 PR ๋ณด๋ผ ์์
- step2 PR :
- MyDate๊ฐ์ฒด๋ฅผ ์๋ก ๋ง๋๋ ๊ฒ ๋์ , Date๋ฅผ extensionํ๋ ๊ฒ์ผ๋ก ์์ ํจ
- ํ๋์ ํ์
์ ๋ด๊ฐ ํ์๋ก ํ๋ ํน์ ๋์์ ๋ง๋ค๋, ๊ตฌํํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์ฌ๋ฌ ๊ฐ์ง ์๋ค.
(์์, extension, ๊ฐ์ฒด ์๋ก ๋ง๋ค๊ธฐ) ์ด ์ธ๊ฐ์ง ์ค์ ์ด๋ค ๋ฐฉ๋ฒ์ด ์ ์ผ ์ ์ ํ์ง์๋ํ ๋๋ง์ ๊ธฐ์ค์ด ์์ด์ผ ํจ!(ํ๋จ ๊ธฐ์ค์ ์ฝ๋๊ฐ ๋ ๊ธธ์ด์ง๋๋ ์งง์์ง๋๋๋ ์ค์ํ ๊ธฐ์ค์ด ์๋๊ณ , ๋ง๋ ์์ฑ์ด๋ ๊ฐ์ฒด๊ฐ ๋ ํจ์จ์ ์ผ๋ก ์ฐ์ด๊ณ ์๋์ง ์๋์ง๋ฅผ ์์ฃผ๋ก ํ๋จํด์ผํ๋ค.) ์ง๊ธ์ ๊ฒฝ์ฐ์๋ MyDate์์ ํฌ๊ฒ ์ฌ์ฉ๋์ง ์๋ ์์ฑ๋ค์ ๊ฐ๊ณ ์๋ค. ์ด๋ฐ ํ๋จ๊ธฐ์ค์๋ฐ๋ผ์ extension์ ์ฌ์ฉํ๊ณ , ํ์ํ ๊ธฐ๋ฅ๋ง ๋ ์ถ๊ฐํ๋ ๋ฐฉ์์ด ๊ฐ์ฅ ํจ์จ์ ์ด์๋ค.
2018.01.30
- ์ํ๊ธฐ step3
- ์ํ๊ธฐ ์ค๊ณ & ๊ธฐ๋ฅ๊ตฌํ
- product enum
- ์ํ๊ธฐ์ stock ์ค๊ณ
- balance ์ค๊ณ
์ํ๊ธฐ ์ปจํธ๋กค๋ฌ
์ํ๊ธฐ์ ์๋ฃ ๋์
๋๋ฆฌ ๊ฐ์ผ๋ก ๋ฃ์๋ reduce์ฌ์ฉํ๊ธฐ
- userInput ๋ฐ์ - ๊ธ์กํฌ์
- input๊ฐ์ด ์ ํจํ ๊ฐ์ธ์ง ์ฒดํฌํ๊ณ ํ๋ฆ์ ์ด
- ๊ธ์ก ํฌ์
์ MoneyUnit์ ํด๋นํ๋๊ฐ๋ง ๊ฐ๋ฅํจ
- ์ปจํธ๋กค๋ฌ๋ MoneyUnit์ int๊ฐ ๋ฆฌํด
- MoneyUnit์ Int๊ฐ์ ์ํ๊ธฐ์ ๋ฐธ๋ฐ์ค์ ์ถ๊ฐ
- ์ํ๊ธฐ ๋ฐธ๋ฐ์ค์ ์ ์ฅ๋๋ฉด ์ฌ์ฉ ๊ฐ๋ฅํ ๊ธ์ก๋ง filteringํด์ ์ฌ๋ฆฌ๊ธฐ
- ๋ฐํ์
ํ์
์ธํฌ๋ฉ์ด์
- meta type์ด ์ด ํ์ข
๋ฅ
- object identifier ์ฌ์ฉ์ผ๋ก ์๋ฃ์ ์ฌ๊ณ ๋์
๋๋ฆฌ ๊ตฌํ
2018.02.01
- ์ํ๊ธฐ step3 ์งํ (์ํ๊ธฐ๋ 2/5๊น์ง ์ผ๋จ ์์ฑํ๊ธฐ)
- ํด์ปค๋ญํฌ ์๊ณ ๋ฆฌ์ฆ ํ์ด๋ณด๊ธฐ(๊ฐ์ฅ์ฌ์ด๋จ๊ณ)
- ๋ธ๋ก๊ทธ ๊ธ ๊นจ์ง ๊ฒ ์ ๋ฆฌ
2018.02.02
- ์ํ๊ธฐ step3 ๊ตฌํ stockController
- stock๊ฐ์ฒด์ ์ญํ : ๊ตณ์ดํ์ํ๊ฐ? ๊ทธ๋ ๋ค๋ฉด vendingMachine๊ณผ์ ๊ด๊ณ๋?
- vendingMachine์ showCase๊ฐ์ ์์ฑ์ด ํ์ํ์ง ์์๊น?
- ๋จ๊ฑฐ์ด ์๋ฃ๋ฅผ ๊ณจ๋์๋ / ์ง๊ธ ๋์ผ๋ก ์ด ์ ์๋ ์๋ฃ๋ง ํํฐ๋งํ์๋ showCase์ ์ํ๊ฐ ๊ณ์ ๋ฐ๊ปด์ผํ๋ ๊ฒ ์๋๊น
- ๊ทธ๋ ๋ค๋ฉด ๊ทธ showCase์ ํํ๋?
์ง๋ฌธ๊ฑฐ๋ฆฌ
Beverage์ validate() (Attributes ํ๋กํ ์ฝ์ ๋ฉ์๋)
// ์ํผํด๋์ค
func validate() -> Bool {
print("์ ํจ๊ธฐ๊ฐ: \(self.validDuration)")
return self.manufactured.isOutOfDate(validDuration: self.validDuration)
}
์๋ธํด๋์ค์ isValid()
func isValid() -> Bool {
return super.validate()
}
์๋ธํด๋์ค์ super.validate()
๋๋ฌธ์ ์ํผํด๋์ค์ validate()
๋ด๋ถ์ self.validDuration
๋ง ์๊พธ ํธ์ถ๋จใ
ใ
ํด๊ฒฐ ํ ์๋ก์ด ์๊ฐ๊ฑฐ๋ฆฌโฆ
- JKโs Comment: Beverage.validate()์์ ํ ์ผ๊ณผ SoftDrink.validate()์์ (๊ฐ์ ์์ ์ ์์ฑ์ ์ ๊ทผํ ์ ์์ผ๋) ํ ์ผ์ ๊ตฌ๋ถํด์ ๊ตฌํํด๋ณด์ธ์
- ์์์ ๋์ฒด ์์ฐ๋๊ฑธ๊น? ์ํผํด๋์ค๋ ํ ์ผ์ด ์๋คใ
ใ
.. ์ด๋ฌ๋ฉด ๊ทธ๋ฅ ํ๋กํ ์ฝ์ ์ฐ๋๊ฒ ๋ซ์ง ์์์ ์ธ ํ์๊ฐ ์์๋๊ฑธ๊น? ์ง๊ธ ๋์ ์ค๊ณ๋ก๋ ์ด ์ฌ์ฉ๋ฒ์ ํ๋กํ ์ฝ์ ๊ฐ๊น์ง ์์์ด ๋ฌธ์ ๊ฐ ์๋โฆ
- ์ํผํด๋์ค์ ์ญํ - ์ง๊ธ ๊ฑฐ์ Beverage๋ ์ญํ ์ด ์์!
2018.02.04
TIL
- ์ ๋ํ
์คํธ ์ฝ๋ ์์ฑํ๋ค๋ณด๋๊น ํ
์คํธ๊ฐ ์ด์ํด์ ๋ฒค๋ฉ๋จธ์ ๊ณผ stockController์ ๊ด๊ณ๋ฅผ ์กฐ๊ธ ๋ฐ๊ฟ์ผ ํ ๊ฒ ๊ฐ๋ค.
- stockController์ ๋ฒค๋ฉ๋จธ์ ์ด ๋ชจ๋ [Beverage]๋ฅผ ๋ฐ์์ initํ๊ณ , stockController๊ฐ ๋ฐ๋ก ๋์
๋๋ฆฌ๋ก ๋ฐ๊พธ๋ ๋์์ ํ๋ ๋ฉ์๋๊ฐ ์๋๋ฐ ๋์
๋๋ฆฌ๋ก ๋ฐ๊พธ๋ ๊ฒ์ ํ๋ฉด์ ํ์ํ๊ณ ๋ด๋ถ์ ์ ์ฅํ๊ธฐ ์ํ ์ฉ๋์ด๋ฏ๋ก, vendingMachine์ด ๊ฐ์ง๊ณ ์๋๊ฒ ๋ง๋ ๊ฒ ๊ฐ์ > [Beverage]๋ก ์ํ๊ธฐ๋ฅผ initํ๊ณ ๋์
๋๋ฆฌ๋ก ๋ฐ๊ฟ์ stockController๋ฅผ ์ด๊ธฐํ
- vendingMachine์์, ๊ฒฐ๊ณผ์ ์ผ๋ก stock์ ๋ฆฌํดํด์ผํ๋๋ฉ์๋ (์ ํต๊ธฐํ ์ง๋ ์ ํ ์ฒดํฌ, ํ์ฌ๊ธ์ก์ผ๋ก ๊ตฌ๋งค ๊ฐ๋ฅํ ์๋ฃ์ ์ฒดํฌ ๋ฑ๋ฑ..) ์ด๋ฐ๊ฒ stockController๊ฐ stock์ ๊ฐ์ง๊ณ ์๊ณ stock์ ๋์
๋๋ฆฌ ํํ๋ก ๋ง๋ค์ด์ฃผ๋ ๋์์ ๊ฐ์ง๊ณ ์๋ค๋ณด๋ ์ด์ํ๊ฒ ์ ๋ฐ ๋ฉ์๋์์ ์ปจํธ๋กค๋ฌ๋ฅผ ๋ฆฌํดํ๊ฒ๋ง๋ค์ด์ก๋คโฆ ์ด๋ฅผ stock์ ๋ฆฌํดํ๋๋ก ๋ง๋ค๊ฒ.
22 Jan 2018
|
TIL
2018.01.22
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)
}
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 ํผ๋๋ฐฑ ๋ฐ์
2018.01.28
- ์ผ์์ผ - ๋จธ์ง ๋์ง ์์์ด๋ ๋ฐฉํ์ด ์ผ๋ง ์๋จ์๊ธฐ์ ๋ฏธ๋ฆฌ ์ํ๊ธฐ step2์งํํจ.
08 Jan 2018
|
TIL
2018.01.08
todo
- JSON step6 ํผ๋๋ฐฑ ์ฒ๋ฆฌ / ๋ง๋ฌด๋ฆฌ
- main ํ๋ฆ์ ์ด
- while๋ฌธ์ ์ถ๊ฐํ๊ณ catch๋ธ๋ญ์์ break๋ฅผ ์ด์ฉํด์ ์๋ฌ์ํฉ์์์ ํ๋ฆ์ ์ด๋ ํ์ง๋ง, ๋ง์ง๋ง์ ์ ์์ ์ธ ์ผ์ด์ค์ผ๋ break๋ฅผ ์๋ฃ์ด์ ์์ ํ๋ก๊ทธ๋จ์ด ๋ฌดํ๋ฃจํ๋ฅผ ๋์์โฆ๊น์ง๋๋๋ค. : while์ ์ฐ๋ฉด ๊ผญ ๋ง์ง๋ง๋ก์ง๊น์ง ์ ์์ ์ผ๋ก ์คํ๋์๋๋ break๋ฅผ ๋ฃ์ด์ ํ๋ฆ ์ ์ด๋ฅผ ํ์!
- inputView์ readFile(): ์ฌ์ฌ์ฉํ ์์๋๊ตฌ์กฐ๋ก ๋ณ๊ฒฝ - ok
- OutputView์ showResult()ํจ์์์ ํ์์๋ ์ธ์
- main์ด ๋ณต์กํด์ง๋๋ผ๋, ํจ์ ๋ด๋ถ์์ switch๋ฌธ์ ์จ์ ๋ฌด์ธ๊ฐ ํ๋จํ๊ณ ๋ค๋ฅด๊ฒ ๋์ํด์ผํ๋ ๋ก์ง์ด ์์ผ๋ฉด ๊ทธ ํจ์๋ฅผ ๊ฐ๋จํ ๋ง๋๋๊ฒ ๋ ์ค์ํจ. ์ง๊ธ ์ํฉ์์๋ main์์ outputType(console or make file)์ ์๊ณ ์์ผ๋, OutputView์์ ํจ์๋ฅผ ํ๋๋ง ๋ถ๋ฅด๋๊ฑธ๋ก ์ฝ๋๋ฅผ ์ง์ main์ ๊ฐ๋จํ๊ฒ ๋ง๋ค๊ฒ ์๋๋ผ ์ง์ main์ ์๋ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ๋ฐ๋ก ํ์ํ ํจ์๋ฅผ ํธ์ถํ๋๊ฒ ๋ ์ฌํํ๊ณ ์์๋ณด๊ธฐ ์ฌ์ด ๊ตฌ์กฐ์.
- showResult() ์ง์ฐ๊ณ resultMessage์์ฑ, console์ ๊ฒฐ๊ณผ ์ถ๋ ฅ, ํ์ผ๋๋ ํ ๋ฆฌ๋ฅผ ์ธ์๋ก ๋ฐ์ file๋ง๋๋ ํจ์๋ก ์๊ฒ ๋๋๊ณ outputType์ ๋ฐ๋ผ
- JSON ํผ๋๋ฐฑ ์ ๋ฆฌ
- ํด๋ฆฐ์ฝ๋ ์ฑ
์ฝ๊ธฐ
- HIG ๋ฐํ๋ค์! : ๋ชจ๋ฐ์ผ ๊ธฐ์ค์ผ๋ก
- HCI๋ถ์ผ : ๋งฅํจํ ์ ํ๋ฉด์ด ์ฝ์์์ ํ๋ฉด(UI)์ผ๋ก ๋์ด๊ฐ๋ ์ฌ๋ฆฌํ์์ ํจ๊ป, ์ผ์ ์ํ์ ์๋ ๋์๋ค์ ์ ์ฉํด์ ์ปดํจํฐ์ ์คํํ๋ค. ์ด๋ฐ ์ฐ๊ตฌ๋ฅผ ํ๋ฉด์ ๋ง๋ค์ด์ง ๋ถ์ผ๊ฐ HCI๋ถ์ผ
- ๋์์ธ ๊ฐ์ด๋๋ผ์ธ์ ๋ฐ๊พธ๋ฉด ํญ์ ์๋ก์ด ์ฑ ์์ด์ฝ์ด ๋์ด
- ํผ์ ๊ณต๋ถํ ๊ฑฐ๋ฉด ์ ํ ์ฑ์ ๋๊ฐ์ด ๋ง๋ค๋๋ก ๋
ธ๋ ฅ. ๊ทธ๊ฒ๋ง ์ ๋ง๋ค๋ฉด ๋ ๋ฒจ3๋ ๋๋ ์ค๋ ฅ์ด ๋ ๋ฏ
TIL
- JSON step6 ํผ๋๋ฐฑ ์ฒ๋ฆฌ
- ์๋ฌํธ๋ค๋ง / ํ๋ฆ์ ์ด : ๋์ ๊ฒฝ์ฐ๋ main์ while๋ฌธ์ ์ถ๊ฐํด์ catch๋ฌธ ์์ break์ ์จ์ ํ๋ฆ ์ ์ด๋ฅผ ํ๋๋ฐ, ๋ง์ง๋ง์ ์ ์์ ์ธ ์ผ์ด์ค์ผ๋ break๋ฅผ ์๋ฃ์ด์ ์์ ํ๋ก๊ทธ๋จ์ด ๋ฌดํ๋ฃจํ๋ฅผ ๋์์โฆ๊น์ง๋๋๋ค. : while์ ์ฐ๋ฉด ๊ผญ ๋ง์ง๋ง๋ก์ง๊น์ง ์ ์์ ์ผ๋ก ์คํ๋์๋๋ break๋ฅผ ๋ฃ์ด์ ํ๋ฆ ์ ์ด๋ฅผ ํ์!
- ํจ์๋ฅผ ๊ฐ๋จํ๊ฒ: ํจ์๋ ์ด๋ค ์์น์์๋ ์ฌ์ฌ์ฉํ ์ ์๋ ํจ์๋ก ๋ง๋ค๋๋ก ๋
ธ๋ ฅํ๊ธฐ.
- ๋ง์ฝ ํจ์ ๋ด์์ switch-case๋ฅผ ์จ์ ๋ฌด์ธ๊ฐ๋ฅผ ๋น๊ตํ๊ณ ๊ทธ ์์์ ํจ์๋ฅผ ์คํํ๋ค๋ฉด, ์ฌ์ง์ด ๋ชจ๋ ์ผ์ด์ค์์ ํ์์๋ ์ธ์๊น์ง ํ๊บผ๋ฒ์ ๋ฐ์์ ์ฒ๋ฆฌํ๊ณ ์๋ค๋ฉด ๋ญ๊ฐ ์๋ชป๋ ํจ์ ์์ ์ธ์งํด์ผํ๋ค!
- ํจ์๋ฅผ ์ต๋ํ ์ฌํํ๊ฒ ๋ง๋ค๋ฉด, ์คํ๋ ค main์์ ํจ์๋ฅผ ํธ์ถํ๋ ์ฝ๋๊ฐ ๊ธธ์ด์ง์ง๋ผ๋ ํธ์ถ-๋ฆฌํดํ๋ ๊ด๊ณ๊ฐ ์ง๊ด์ ์ผ๋ก ๋๊ธฐ ๋๋ฌธ์ ์ผ๋จ ์ง๊ธ์ ๊ฐ์ฒด ์์ ์ฝ๋๊ฐ ๊ฐ๋จํด์ง๋๊ฒ์ด ๋ ์ค์ํ๋ค!
- ๋ค๋ฅธ ๋ฉค๋ฒ๋ค์ HIG๋ฌธ์์๋ํ ๋ฐํ๋ฅผ ๋ค์๋ค. (HIG: Human Interface Guidelines, ๋์์ธ ๊ท์น์ ์ค๋ช
ํ๊ณ , ์์
๋์์ ๋ํ ์ค๋ช
๊ณผ ๊ธฐ๋ฅ์ ์ธ ์ค๋ช
์ ํตํด ์ฑ ๊ฐ๋ฐ์ ์ด๋ป๊ฒ ํ๋ฉด ์ข์์ง์ ๋ํ ๊ฐ์ด๋๋ผ์ธ) ๋ด๊ฐ ์ฌ์ฉํ๋ ์ฑ ์ค์ ์์ธ๋ก ๋ง์ ์ฑ๋ค์ด ์ด ๊ฐ์ด๋๋ผ์ธ์ ์ ์งํค์ง ์๋ ๊ฒ ๊ฐ์๋ค. ์ฌ์ค ํ์์ ์ธ ์์๋ง ์งํค๋ฉด ์ ํ์คํ ์ด์ ์ฌ๋ผ๊ฐ๋ค๋๋ฐ, ๋๋ ์ด ๊ฐ์ด๋๋ผ์ธ์ ์ต๋ํ ํ์ฉํ๊ณ ์ง์ผ์ ์ ๋ง iOS๋ค์ด ์ฑ์ ๋ง๋ค๊ณ ์ถ๋ค. ๋นจ๋ฆฌ ์ฑ ๋ง๋ค๊ณ ์ถ๋ค!
2018.01.09
TODO
- JSON step6 ํผ๋๋ฐฑ ๋ง๋ฌด๋ฆฌ
- ๋จธ์ง๋๋ฉด ์นด๋๊ฒ์
- ์๋ฌํธ๋ค๋ง/ํ๋ฆ์ ์ด ์์ ์ฐพ์๋ณด๊ณ ๊ณต๋ถํ๊ธฐ
- ํด๋ฆฐ์ฝ๋์ฝ๊ธฐ
- JSON๋ฏธ์
๊ณผ์ wiki์ ์ ๋ฆฌ
TIL
- ํด๋ฆฐ์ฝ๋ ์กฐ๊ธ ์ฝ์
- JSON ์๋ฃ!
- ์นด๋๊ฒ์ ์ง์
- ์์ฑ์ ๋ํด description - getํ๋กํผํฐ / NSObject : ๊ตฌ์กฐ์ฒด๋ฅผ CustomStringConvertible ํ๋กํ ์ฝ์ ์ค์ํ๋๋ก ๊ตฌํํ๋ฉด description์์ฑ์ ์ถ๋ ฅํ ๋ ์ฌ์ฉํ ์ ์๋ค.
- ์ปดํ์ผ๋ฌ๊ฐ ๋ฉ์๋ ๋งค๊ฐ๋ณ์์ ํ์
์ ๋ช
ํํ๊ฒ ์ ์ถํ ์ ์์ผ๋ฉด CardDeck.Suit.heart ๋์ .heart ๋ก ๋์ฒด ๊ฐ๋ฅ : ํ๋ผ๋ฏธํฐ ํ์
์ enumํ์
์ผ๋ก ๋ช
์ํ๋ค๋ฉด, .heart์ฒ๋ผ enum์ผ์ด์ค๋ง ์์ฑํด๋ ์ปดํ์ผ๋ฌ๊ฐ ํ์
์ ์ถ๋ฅผ ํ ์ ์๋ค!
2018.01.10
TIL
- ์นด๋๊ฒ์ ํผ๋๋ฐฑ ์ฒ๋ฆฌ
- JSON๋ฏธ์
step2 ํผ๋๋ฐฑ
- ํด๋ฆฐ์ฝ๋์ฝ๊ธฐ
2018.01.11
TODO
- ์นด๋๊ฒ์ step1 ํผ๋๋ฐฑ ์ฒ๋ฆฌ
- ์นด๋๊ฒ์ step2 ์์
- JSON step2 ํผ๋๋ฐฑ
- ์ฝ๋๋ฆฌ๋ทฐ ์ฝ๋ฉํธ ํผ๋๋ฐฑ : Before Code review > After Code review
- ์๋กญ๊ฒ ์ ์ฉํ๋ ๊ฐ๋
์ ๋ฆฌ
2018.01.12
TODO
- ์นด๋๊ฒ์ step2 ํผ๋๋ฐฑ ์ฒ๋ฆฌ -> ๋ค์๋จ๊ณ๋ก!
- ์นด๋๊ฒ์ README์
๋ฐ์ดํธ
- JSON step2 ํผ๋๋ฐฑ
- ํด๋ฆฐ์ฝ๋์ฝ๊ธฐ
TIL
CardGame README
enum์ rawValue๋ฅผ ์ด์ฉํด์ ๊ทธ enum์ ํน์ ํ ์ผ์ด์ค(rawValue์ ์ผ์นํ๋)๊ฐ ๋ง๋ค์ด์ง๋ ๋ฐฉ๋ฒ์ด ์์.
ํนํ switch-case๋ก ๋น๊ตํ ๋ enum์ ์ด์ฉํ๋ฉด ์ฌ์ฉ์์ input์ ์ ํํ๋ค๋ ์๋ฏธ๋ ์์ง๋ง ์ปดํ์ผ๋ฌ๊ฐ ๋น ์ง ์ผ์ด์ค๋ฅผ ๋ฏธ๋ฆฌ ์๋ ค์ค ์ ์๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ์์ ์ค์๋ฅผ ๋ฐฉ์ดํ๋๋ฐ์๋ ์ฉ์ดํ ๋ฉด์ด ์์.
-
EnumCollection ์ถ๊ฐ - static let allValue
๋ฅผ ์ฌ์ฉํ์ง ์๊ณ enum case๋ฅผ collection์ผ๋ก ๋ง๋ค์ด์ฃผ๋ ํ์ฅ ๋ฐฉ๋ฒ์ ์ฐพ์์ ๊ณต๋ถํ๊ณ ์ ์ฉ ์ฐธ๊ณ ๋ธ๋ก๊ทธ
-
showCard()์ resultMessage() ํฉ์นจ
JSON์์ ๋ฐฐ์ด ๊ฒ
- ํ๋กํ ์ฝ์ ์ธ์๋ก ๋๊ธฐ๋ ๊ตฌ์กฐ / ํ๋กํ ์ฝ๋ก ์ถ์ํํ๋๊ฒ
- enum์ ์ฐ๊ด๊ฐ์ผ๋ก ํ๋ก๊ทธ๋จ์ ํ์ํ ํ์
๋ค์ ๋ฌถ์ด๋์
- Array / object ์ค์ฒฉ๋ (์๊ฐ๋ณด๋ค ์ฝ๊ฒ?)๊ฐ์ด ํด๊ฒฐํ ์์์๋ค.
- ๋ก์ง - DTO - ๋ก์ง DTO
- Input - Grammar - Parser - (ConvertTarget[String] - DataTypeConverter) - ValueCounter - 1. CountInfo 2. ResultData - OutputView
- ResultData๋ JSONData์ ์ฝ๋ ์
์์ ๊ฐ๋ค์ ํ๋์ฉ ๋ค ๊ฐ์ ธ์ค๋ฉด์ String์ผ๋ก ํ๋ณํํจ. ๊ทผ๋ฐ ์ด๊ฒ๋ ํ๋กํ ์ฝ๋ก ๋นผ์ํ ์์์๊ฑฐ๊ฐ์
- ํ๋ฆ์ ์ด๊ฐ ๋ฌธ์
enum JSONData {
case IntegerValue(Int)
case StringValue(String)
case BoolValue(Bool)
case ObjectValue(Dictionary<String, JSONData>)
case ArrayValue([JSONData])
}
2018.01.13
- JSONParser๋ฏธ์
ํ๊ณ !!
- ์นด๋๊ฒ์ step3 ํ๋ฆฌ๋ทฐ
02 Jan 2018
|
TIL
2018.01.02
TIL
- JSON step4 merge
- JSON step5 ์งํ
- JSON ํ๋ฆฐํธ ํํ ํ์ธ - JSONLint
- JSON ์ค์ฒฉ๋ฐฐ์ด๊ณผ ์ด๋ ์ด ํํ๋ฅผ ์ด๋์๋ถํฐ ๊ฐ์ ธ์์ผํ๋์ง ์ค๊ณ
2018.01.03 ~ 04
TIL
- JSON step5 PR
- ์ถ๋ ฅํ ๋ ๋์ค๋ optional ์ฒ๋ฆฌ : enum์ ์ฐ๊ด๊ฐ
- ์ฐ๊ด๊ฐ์ด ๋์ค๋๊ฑธ CustomStringConvertibleํด์ ์ฐ๊ด๊ฐ์ ๋ฆฌํดํ๊ฒ ๋ง๋ค๋ฉด String(describing:) ํด์ ์คํธ๋ง์ผ๋ก ๊ทธ ๊ฐ์ด ๋์ด์ด!
- JSON๋ฏธ์
ํ๋ฉด์ ์๋ก ์์๋ ๊ฐ๋
๋ค, ์ฌ์ฉ๋ง ํ๊ณ ๋์ด๊ฐ๋ ๋ด์ฉ๋ค ์ ๋ฆฌ
- ๋์
๋๋ฆฌ์ ๋ฐธ๋ฅ ๊ฐ์ ํญ์ ์ต์
๋!
- github wiki ์ฌ์ฉ - ๋ฏธ์
, ํผ๋๋ฐฑ ๋ด์ฉ ์ ๋ฆฌ์ฉ
2018.01.05
TIL
- JSON step6 ํผ๋๋ฐฑ ์ฒ๋ฆฌ
try!
ํ๋ ๋ถ๋ถ ์๋ฌ/ํ๋ฆ์ ์ด ์ฒ๋ฆฌ : ํ์ผ ์์ ๋ด์ฉ์ด ๋ฌธ๋ฒ์ ๋ง์ง ์๊ฑฐ๋ ๋น ํ์ผ(๊ธ์จ๊ฐ ์๋ ํ์ผ)์ด๋ฉด GrammarChecker์์ ๊ฑธ๋ฌ์ ธ์ ํ๋ฆ ์ ์ด๊ฐ ๋ ์ค ์์๋๋ฐ, ํ์ผ์ด ์์๋์ ํ๋ฆ์ ์ด๊ฐ ๋ฌธ์ ์๋ค.
- filepath๋ฅผ Bundle๊ณผ FileManager์์ ์ฝ์ด์ค๋๊ฒ ์ฐจ์ด - ๋ฒ๋ค๊ณผ ํ์ผ๋งค๋์ ์ ์ฐจ์ด
- ๊ฐ์ฒด์ ์์กด์ฑ (commandLine / askUserInput) : askUserInput() ํจ์์์ CommandLine๊ฐ์ฒด ๋ด์ ๋ฉ์๋๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ๋ ๊ตฌ์กฐ๋ askUserInput์ ์ฌ์ฌ์ฉ ํ ์ ์๊ณ , ํ
์คํธ๋ ํ ์ ์๋ ๊ตฌ์กฐ์.
- CommandLine ๋ด์ ๋ฉ์๋์ ๋ฆฌํด๊ฐ์ askUserInput์ ์ธ์๋ก ๋๊ธฐ๋ ๊ตฌ์กฐ๊ฐ ๋ ์ข์๊ตฌ์กฐ!
- ํญ์ ์ด๋ค ๋ฉ์๋๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด์๊ฒ ์์กดํ๋ ํ๋ฆ์ ๊ฒฝ๊ณํด์ผํ๋ค!
- JSON step6
- ํ๋ฆ์ ์ดํ๋ค๊ฐ ์์ ํ๋ค๊ฐ debug๋ถ๋ถ์์ ์ ๋๋ก ๋ค์ด๊ฐ์ง๊ฐ ์์๋ค. ์ด๋์ ์๋ฌ๊ฐ๋๊ฑด์ง๋ ๋ชจ๋ฅธ์ฑ ํ๋ฆฐํธ๋ฅผ ํ๋์ฉ ์ฐ์ผ๋ฉด์ ๋ฐ๋ผ๊ฐ๋ค๊ฐโฆใ
ใ
๊ฒฐ๊ตญ grammar, input, resultData๊น์ง ๊ฐ์ ํ๋ฆฐํธ๋ฅผ ์ฐ์ด๋ดค๋ค!!!!!!!!!!!!!!!!1 ๊ทธ๋ฌ๋ค๊ฐ input.jsonํ์ผ์ ์ด์๋๋ฐ ์ํฐ๊ฐ ๋ค์ด๊ฐ์์๋ค. ์ด์ํ๋ค!!!!!!!!!! ๋๋ฌด์ด์ํด์ ํ
์คํธํธ์ง๊ธฐ์์ jsonํจํด์ ์จ๋ณด๊ณ ์ ์ฅํ๋๋ฐ!!!!!!!!!!!! ๊ฒฐ๊ตญ ์ํฐ์ด ๊ธ์ ์ ์ฅํ๋ฉด์ ์ํฐ๋ฅผ ๋ฃ์ด์ ์ ์ฅ์ํ๋๊ฒ์ด์ผ!!!!!!!!!!!!!!!!๊ทธ๋์ ์๋๋๊ฒ์ด๋ค!!!!!!!!!!! ใ
ใ
ใ
ใ
ใ
ใ
ใ
ใ
ใ
ใ
ใ
ใ
ใ
ใ
ใ
ใ
ใ
ใ
ใ
ใ
ใ
ใ
ใ
ใ
ใ
ใ
ใ
ใ
๋ฉ๋ถ
- ๊ทธ๋์ ๊ฒฐ๊ตญ ๊ณ ๋ฏผํ๋ค๊ฐ (ํผ๋๋ฐฑ ์ฒ๋ฆฌํ๋ค๊ฐ ์๋ผ์ ์ฝ๋๊ฐ ์๋ชป๋์ค์๊ณ step6 PR๋ณด๋ธ ์ฝ๋ ๋ณต๋ถํจ) ์์ ํ๋ค ๋ง ์์ฝ๋๋ก ๋์๊ฐ๊น, ์๋๋ฉด ๋์๊ฐ๊ธฐ๋ ํ์๋ ํผ๋๋ฐฑ ๋น์์ ์ฝ๋๋ก ๋์๊ฐ๊น ๊ณ ๋ฏผํ๋ค๊ฐ ๊ทธ๋ฅ ์์ ํ๋ค ๋ง ์ฝ๋๋ก ๋์๊ฐ๋ค. (git reset โhard ์ต์
์โฆ)
- ์ปค๋ฐ ๋ฉ์์ง๋ฅผ ์์ฐ์ ์ปค๋ฐ๋ฉ์์ง๋ฅผ ๊ตฌ์ฒด์ ์ผ๋ก์ฐ์!!
์ง๋ฌธ๊ฑฐ๋ฆฌ
- guard ์ต์
๋์ฒด์ด๋. case1๊ณผ case2์ ์ฐจ์ด!
```swift
// case 1
let userInput = inputView.askUserInput(message: โ๋ถ์ํ JSON ๋ฌธ์์ด์ ์
๋ ฅํ์ธ์.โ)
guard userInput != nil else {
throw GrammarChecker.FormatError.invalidInput
}
commandLineInput = (input: userInput, output: โโ)
// userInput์ด ๊ณ์ String?์ผ๋ก ์ธ์
// case 2
let userInput = inputView.askUserInput(message: โ๋ถ์ํ JSON ๋ฌธ์์ด์ ์
๋ ฅํ์ธ์.โ)
guard let inputString = userInput else {
throw GrammarChecker.FormatError.invalidInput
}
commandLineInput = (input: inputString, output: โโ)
//inputString์ด String์ผ๋ก ์ธ์!
```