๊ณต๋ถ€ ์—ฐ์Šต์žฅ :-)

TIL_20180108 ~ 20180113

|

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

  • ์นด๋“œ๊ฒŒ์ž„ PR๋ณด๋ƒ„

CardGame README

  • userInput์„ enum์œผ๋กœ ๊ด€๋ฆฌ. let v = menuInput(rawValue: "1") : enum์˜ rawValue๋ฅผ ๋„ฃ์œผ๋ฉด ๊ทธ ์ผ€์ด์Šค์— ํ•ด๋‹นํ•˜๋Š” menuInput.one์ด ๋งŒ๋“ค์–ด์ง€๋Š”๊ฒƒ! ๋Œ€์‹  ์ด ๋ฐฉ๋ฒ•์€ v๊ฐ€ menuInput?์œผ๋กœ ์˜ต์…”๋„๋กœ ๋งŒ๋“ค์–ด์ง€๊ธฐ๋•Œ๋ฌธ์— ์˜ต์…”๋„์„ ํ’€์–ด์ค„ ์ˆ˜ ์žˆ๋Š” ๋ฉ”์†Œ๋“œ๊ฐ€ ํ•„์š”ํ•˜๊ธฐ๋„ ํ•จ. ์•„๋ž˜์˜ ๋ฐฉ๋ฒ• ์ฐธ๊ณ 
    enum gameMenu: String {
          case one = "1"
          case two = "2"
          case three = "3"
          case quitGame = "q"
          case wrongInput
      }
      // ์ด๋ ‡๊ฒŒ wrongInput์ฒ˜๋Ÿผ rawValue๋ฅผ ๋„ฃ์ง€์•Š์€ ์ผ€์ด์Šค๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ ๋‹ค!
    
      func select(rawValue: String) -> gameMenu {
          if let inputMenu = gameMenu(rawValue: rawValue) {
              return inputMenu
          }
          else {
              return .wrongInput
          }
      }
    

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
    1. 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 ํ”„๋ฆฌ๋ทฐ

Comments