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

TIL_20171204 ~ 20171208

|

2017.12.04

TIL
  • ์ขŒํ‘œ๊ณ„์‚ฐ๊ธฐ ๋ฆฌํŒฉํ† ๋ง
    • InputChecker์—์„œ Mypoint์˜ ์œ ํšจ์—ฌ๋ถ€๋ฅผ ์ฒดํฌํ•˜๋Š” ๋ถ€๋ถ„ ์ฑ…์ž„ ๋‚˜๋ˆ”
      • InputChecker์— ์žˆ๋˜ ๊ฑฐ๋Œ€ํ•œ ํ•จ์ˆ˜ ๋‘๊ฐœ๋ฅผ ์ž˜๊ฒŒ ์ชผ๊ฐœ์„œ private์œผ๋กœ ์„ ์–ธ
      • InputChecker์— ์žˆ๋˜ MyPoint์˜ ์œ ํšจ์—ฌ๋ถ€ ๊ฒ€์‚ฌ์˜ ์ฑ…์ž„์„ MyPoint๋กœ ๋„˜๊น€
    • ๋„ํ˜•์˜ ๊ผญ์ง“์ ์ด ์„œ๋กœ ๊ฐ™์€์ง€ ์ฒดํฌํ•˜๋Š” ๋ถ€๋ถ„ ๊ฐœ์„ 
    • ๊ทธ ์™ธ ํ”ผ๋“œ๋ฐฑ ๊ฐœ์„ 
      • inValidShape๊ฐ™์€ ์ด์ค‘๋ถ€์ •์˜ ๋œป์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ์“ฐ์ง€๋ง๊ณ  โ€œisValid, true์ผ๋•Œ ์ •์ƒ, false์ผ๋•Œ ์—๋Ÿฌ์ฒ˜๋ฆฌโ€์™€ ๊ฐ™์ด ์ง๊ด€์ ์œผ๋กœ ์ˆ˜์ •
      • main ํŒŒ์ผ์—์„œ ๊ฐ€๋…์„ฑ์„ ์œ„ํ•ด์„œ ์ธ์Šคํ„ด์Šค๋‚˜ ๋ณ€์ˆ˜๋ฅผ ๋งจ ์œ„์— ๋‹ค ์„ ์–ธํ•˜์ง€ ๋ง๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๋ถ€๋ถ„ ์œ„์— ์„ ์–ธํ•˜๊ธฐ
  • ๋น…๋„ˆ๋“œ๋žœ์น˜ - ์—๋Ÿฌ์ฒ˜๋ฆฌ๋ถ€๋ถ„ ์ฝ๊ธฐ
  • ์ž๊ธฐ๊ฐ€ ํ•˜๋Š” ์ผ์˜ ์–‘์„ ๊ฐ€๋Š ํ•˜๊ณ  ์•„๋Š”๊ฒŒ ์ค‘์š”ํ•จ!

2017.12.05

TODO
  • JSON parser ์‹œ์ž‘
    • step1 ๊ฐœ์š”์งœ๊ธฐ
    • ์—ฌ๋Ÿฌ ํƒ€์ž…์„ ๋‹ด๋Š” ์–ด๋ ˆ์ด ๊ณต๋ถ€
    • ์ •๊ทœํ‘œํ˜„์‹ ๊ณต๋ถ€ (step3๋ถ€ํ„ฐํ•˜๊ธฐโ€ฆ)
TIL
  • trimmingCharacter๋กœ ๊ณต๋ฐฑ์ž๋ฅด๊ธฐ
  • ๋ฐ˜๋ณต๋ฌธ-์กฐ๊ฑด๋ฌธ์—์„œ continue๋ฅผ ์“ฐ์ž. (๋ฐ˜๋ณต๋ฌธ์•ˆ์˜ ์กฐ๊ฑด๋ฌธ์˜ ๋ฐ–- ํŠนํžˆ ์•„๋ž˜์— ์ฝ”๋“œ๊ฐ€ ์žˆ์œผ๋ฉด ์กฐ๊ฑด๋ฌธ์„ ๋น ์ ธ๋‚˜๊ฐ€๋”๋ผ๋„ ๋ฐ˜๋ณต๋ฌธ์— ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋œ๋‹ค๋Š”๊ฑธ ๋ช…์‹ฌ!)
  • guard let ์˜ต์…”๋„๋ฐ”์ธ๋”ฉ
  • ์˜ˆ์™ธ๊ฐ€ ๋‚˜๊ฑฐ๋‚˜ ๋‚ด๊ฐ€ A์ƒํ™ฉ์„ ๊ฐ€์ •ํ•˜๊ณ  A๋ฅผ ์ž…๋ ฅํ•ด์„œ ํ…Œ์ŠคํŠธํ•˜๋Š”๋ฐ ๋งž์ง€ ์•Š๋Š” ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค๋ฉด ๋ฌด์ž‘์ • ์ด๊ฒŒ ์•ˆ๋˜๋„คใ… ใ… ? ๋ผ๊ณ ๋งŒ ์ƒ๊ฐํ• ๊ฒŒ์•„๋‹ˆ๋ผ ์™œ ์•ˆ๋ผ๋Š”์ง€ ์—ฌ๋Ÿฌ ๋ณ€์ˆ˜๋ฅผ ๋”ฐ์ ธ๋ด์•ผํ•˜๊ณ  ์‚ดํŽด๋ด์•ผํ•จ. ์˜ค๋Š˜ ์ฝ”๋“œ์— ๋ฌธ์ œ๊ฐ€ ์—†๋Š” ์ƒํ™ฉ์—์„œ, ๋‚ด๊ฐ€ ์ž…๋ ฅํ•œ ๊ฐ’์ด ์˜ˆ์ƒํ•œ๋Œ€๋กœ ๋ณ€ํ™˜์ด ์•ˆ๋ผ์„œ ๋””๋ฒ„๊น…์„ ํ•˜๋‹ค๊ฐ€, ์•„๋ฌด๋ฆฌ ์ฐพ์•„๋ด๋„ ๋ชจ๋ฅด๊ฒ ์—ˆ๋Š”๋ฐ ์•Œ๊ณ ๋ณด๋‹ˆ ๋ณต์‚ฌ-๋ถ™์—ฌ๋„ฃ๊ธฐ๋กœ readLine()์— ๊ฐ’์„ ๋„ฃ์œผ๋ฉด์„œ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๊ฐ’์ด ๋“ค์–ด๊ฐ”๋˜๊ฒƒ์ด ๋ฌธ์ œ์˜€๋‹ค. ์ด์ฒ˜๋Ÿผ ๋‚ด๊ฐ€ ์ƒ๊ฐ์น˜๋ชปํ•œ ๋ณ€์ˆ˜๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋‹ˆ ์ฝ”๋“œ๋ฅผ ๋œฏ์–ด๋ณด๋Š”๊ฒƒ ์ด์™ธ์˜ ์—ฌ๋Ÿฌ ์ƒํ™ฉ์—๋„ ๊ฐ€์ •์„ ํ•˜๊ณ  ๋‹ค์–‘ํ•˜๊ฒŒ ๋””๋ฒ„๊น…์„ ํ•˜๋Š”๊ฒŒ ์ค‘์š”ํ•˜๋‹ค!

2017.12.06

TIL
  • trimmingCharacter๊ณต๋ถ€
  • Any / AnyObject๋ฅผ ๋‹ด๋Š” Array ๊ณต๋ถ€
  • ์‹ค์šฉ์ฃผ์˜์‚ฌ๊ณ ์™€ ํ•™์Šต ์ฝ๊ธฐ
  • step1 ํ”ผ๋“œ๋ฐฑ ์ฒ˜๋ฆฌ / ๊ฐœ์„ ๋ถ€๋ถ„ ๊ฐœ์„ 

2017.12.07

TIL
  • step1 ํ”ผ๋“œ๋ฐฑ ์ฒ˜๋ฆฌ
  • JSON step2๋‹จ๊ณ„๋กœ ๊ฐ€๊ธฐ
  • ๋”•์…”๋„ˆ๋ฆฌ ๋ณต์Šตํ•˜๊ธฐ
  • ์‹ค์šฉ์ฃผ์˜ ์‚ฌ๊ณ ์™€ ํ•™์Šต ์ฝ๊ธฐ

2017.12.08

TIL
  • step2 PR
    • ๋ฐฐ์—ด ์•ˆ์— ๊ฐ์ฒด ์—ฌ๋Ÿฌ๊ฐœ ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ๊ฒ€์‚ฌํ•˜๋Š”๊ฒŒ ๋‚จ์Œ
      • string๋‚˜๋ˆ„๋Š”๊ฑฐ์ฒ˜๋Ÿผ {} ๊ธฐ์ค€์œผ๋กœ ํ•ด์•ผํ•˜๋Š”์ง€ ์•„๋‹ˆ๋ฉด {}๊ฐ์ฒด๋ชจ์–‘์œผ๋กœ ์žˆ๋Š”๊ฑด ๋‹ค ๊ฐ์ฒด๋กœ ๊ฐ„์ฃผ counting์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์งœ์•ผ ํ•˜๋Š”์ง€โ€ฆ(์ขŒํ‘œ๊ณ„์‚ฐ๊ธฐ์˜ myPoint์ฒ˜๋Ÿผ)
    • PR ๋ณด๋‚ด๊ณ  ํ”ผ๋“œ๋ฐฑ ์ฒ˜๋ฆฌํ•˜๊ธฐ
  • ์†์— ์žกํžˆ๋Š” ์ •๊ทœํ‘œํ˜„์‹์„ ์ฝ์œผ๋ฉด์„œ ์ •๊ทœํ‘œํ˜„์‹์ด ๋ฌด์—‡์ธ์ง€ ์•Œ์•„๋ด„!
  • step2๋ฅผ ํ•˜๋‹ค๊ฐ€, 1๋‹จ๊ณ„๋ถ€ํ„ฐ ์ž˜๋ชป ์ง  ๋ถ€๋ถ„(AnyType์˜ Array๋ฅผ ๋งŒ๋“ค์—ˆ์–ด์•ผํ–ˆ๋Š”๋ฐ ๊ทธ๋ƒฅ ์นด์šดํŒ…๋งŒ ํ•จ)์ด ์žˆ์–ด์„œ ์ „๋ถ€ ๋‹ค ์ง€์šฐ๊ณ  ๋‹ค์‹œ ์‹œ์ž‘ํ–ˆ๋‹ค!
  • if๋ฌธ์ด ๋งŽ์•„์ง€๋ฉด ์ฝ”๋“œ์ด ๋ณต์žก๋„๊ฐ€ ๋†’์•„์ง. if๋ฌธ์ด ํ•จ์ˆ˜ ๋‚ด์— ์žˆ์œผ๋ฉด ํ•ญ์ƒ ์˜์‹ฌํ•ด๋ณด๊ธฐ!

์ขŒํ‘œ๊ณ„์‚ฐ๊ธฐ ์…€ํ”„ ํ”ผ๋“œ๋ฐฑ

|

์ขŒํ‘œ๊ณ„์‚ฐ๊ธฐ ๋ฆฌ๋ทฐ

  • ๋ฏธ์…˜ ์ง„ํ–‰ ๊ธฐ๊ฐ„ : 2017.11.16 ~ 2017.12.04
  • ์ขŒํ‘œ๊ฐ’์„ ์ž…๋ ฅ๋ฐ›์œผ๋ฉด 4์‚ฌ๋ถ„๋ฉด ์œ„์— ์ž…๋ ฅ๋ฐ›์€ ์ขŒํ‘œ๊ฐ’์„ ์ถœ๋ ฅํ•˜๊ณ , ์ขŒํ‘œ๊ฐ’์— ์˜ํ•ด ํ‘œ์‹œ๋œ ๋„ํ˜•์˜ ๊ธธ์ด๋‚˜ ๋„“์ด๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ
  • ์ขŒํ‘œ๊ณ„์‚ฐ๊ธฐ ๋ฏธ์…˜ github ์ €์žฅ์†Œ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋ฐฐ์šด ๊ฒƒ

ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ–ˆ๋‹ค. (+ ํ”„๋กœํ† ์ฝœ ์ปดํฌ์ง€์…˜)

์ด๋ก ๋งŒ ๋“ค์—ˆ์„๋•Œ๋Š” ์–ด๋ ค์šด ๊ฐœ๋…์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ ์‚ฌ์šฉํ•˜๊ณ  ๋ณด๋‹ˆ ์˜คํžˆ๋ ค ํ”„๋กœํ† ์ฝœ๋กœ ์ธํ•ด ๋” ์‰ฝ๊ฒŒ ๊ตฌํ˜„๋˜๋Š”๊ฒŒ ๋งŽ์•˜๋‹ค.
์ถ”์ƒํ™” : ๊ฐ๊ธฐ ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ํ•œ ๋ฉ”์„œ๋“œ์—์„œ ์‚ฌ์šฉํ•ด์•ผํ• ๋•Œ ๋‚ด๋ถ€์—์„œ ํ•˜๋‚˜์˜ ์ด๋ฆ„, ํ•˜๋‚˜์˜ ํƒ€์ž…์œผ๋กœ ๊ฐ๊ฐ ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค๋Š”๊ฒŒ ๊ฐ€์žฅ ์œ ์šฉํ–ˆ๋‹ค. ๋งŒ์•ฝ ์ด๋ ‡๊ฒŒ ํ•˜๋‚˜์˜ ํ”„๋กœํ† ์ฝœ๋กœ ๋ฌถ์ง€ ์•Š์•˜์œผ๋ฉด ๊ฐ ๊ฐ์ฒด๋Š” ํ•˜๋‚˜์˜ ๋ฉ”์„œ๋“œ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋“ค์–ด๊ฐ€๋Š” ์กฐ๊ฑด์„ ์ถฉ์กฑํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ•„์š” ์ด์ƒ์œผ๋กœ ๊ณผ๋„ํ•˜๊ฒŒ ๋งŽ์€ ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฐ€์ง€๋„๋ก ์„ค๊ณ„ํ•˜๊ฑฐ๋‚˜ ๋‹ค์–‘ํ•œ ๊ฐ์ฒด๋ฅผ ๋ฐ›์•„์„œ ์ฒ˜๋ฆฌํ•ด์•ผํ•˜๋Š” ๋ถ€๋ถ„์ด ๊ณผ๋„ํ•˜๊ฒŒ ๋ณต์žกํ•ด์กŒ์„๊ฒƒ์ด๋‹ค.
๊ทธ๋ฆฌ๊ณ  ํ”„๋กœํ† ์ฝœ์€ ๊ฐ ๊ฐ์ฒด๊ฐ€ ๋ฐ˜๋“œ์‹œ ๊ตฌํ˜„ํ•ด์•ผํ•˜๋Š” ๋ฉ”์„œ๋“œ๋“ค์„ ์ •์˜ํ•ด๋†“๋Š”๋ฐ ์ด๊ฒŒ ์–ด๋–ป๊ฒŒ ๋ณด๋ฉด ๊ฐ ๊ฐ์ฒด๋Š” ๊ผญ ์ด ์—ญํ• ์„ ํ•ด์•ผํ•œ๋‹ค๋Š” ์ฑ…์ž„ ๋ถ„๋‹ด๊ณผ ๊ฐ™์€ ๊ฒƒ์ด๋ผ ๊ฐ์ฒด์˜ ์—ญํ• ๋ถ„๋‹ด์—๋„ ์œ ์šฉํžˆ ์“ฐ์˜€๋˜ ๊ฒƒ ๊ฐ™๋‹ค.
์˜ˆ๋ฅผ๋“ค์–ด ๋‚˜๋Š” ๊ฐ ๋„ํ˜•์ด ์„ฑ๋ฆฝ๋˜๋Š” ์กฐ๊ฑด์„ ๊ฒ€์‚ฌํ•˜๋Š” ์ฑ…์ž„์„ ์–ด๋””์— ๋‘์–ด์•ผ ํ• ์ง€ ๊ฐ์ด ์ž˜ ์•ˆ์™”๋Š”๋ฐ โ€˜๋„ํ˜•โ€™์œผ๋กœ ์ถ”์ƒํ™”๋ฅผ ํ•˜๊ณ  ๋ชจ๋“  ๋„ํ˜•์˜ ๊ณตํ†ต๋˜๋Š” ๋ถ€๋ถ„์ธ ์œ ํšจ์„ฑ ์ฒดํฌ ๋ฉ”์„œ๋“œ๋ฅผ ์ค€์ˆ˜ํ•˜๋„๋ก ์„ค๊ณ„ํ•˜๋‹ˆ๊นŒ input์ด๋‚˜ factory๊ฐ์ฒด์˜ ์ฑ…์ž„์ด ๊ณผ๋„ํ•˜๊ฒŒ ๋Š˜์–ด๋‚˜๋Š”๊ฑธ ์ œํ•œ ํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค.
โ€œ์  - ์ง์„  - ์‚ผ๊ฐํ˜• - ์‚ฌ๊ฐํ˜•โ€ ์ˆœ์„œ๋กœ ๋ฏธ์…˜์ด ํ™•์žฅ๋˜์—ˆ๋Š”๋ฐ ์ง์„  ๊ตฌํ˜„ ๋‹จ๊ณ„์—์„œ ํ”„๋กœํ† ์ฝœ์„ ๊ตฌํ˜„ํ•˜๋‹ˆ๊นŒ ์˜คํžˆ๋ ค ๋” ์–ด๋ ค์šด ๋ฏธ์…˜์ด์—ˆ๋˜ ์‚ผ๊ฐํ˜•๊ณผ ์‚ฌ๊ฐํ˜•์„ ์ถ”๊ฐ€๋Š” ๊ตฌํ˜„ ์‹œ๊ฐ„์ด ํ›จ์”ฌ ๋” ์งง์•˜๋‹ค.

์ ‘๊ทผ์ œ์–ด์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ ์ต์ˆ™ํ•ด์กŒ๋‹ค.

private ํ•จ์ˆ˜๋ฅผ ์“ฐ๋Š” ๊ฒƒ์ด ์ฒ˜์Œ์—” ์ƒ๊ฐํ•˜๊ธฐ ๊นŒ๋‹ค๋กญ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์—ˆ๋Š”๋ฐ, ์ด์ œ๋Š” ๋‹น์—ฐํžˆ ๋‚ด๋ถ€์—์„œ๋งŒ ์“ฐ๋Š” ํ•จ์ˆ˜์™€ ์•„๋‹Œ ๊ฒƒ์„ ๊ตฌ๋ถ„ํ•ด์„œ ์ ‘๊ทผ์ œ์–ด์ž๋ฅผ ์“ฐ๋ ค๊ณ  ํ•œ๋‹ค.
main ํŒŒ์ผ๋„ ์ด๋Ÿฐ ์‹์œผ๋กœ ์ ‘๊ทผํ•˜๋ฉด ์ง€๊ธˆ๋ณด๋‹ค ์ค„์–ด๋“ค ๊ฒƒ ๊ฐ™๋‹ค.

๊ฐ์ฒด์˜ ์ฑ…์ž„ ๋ถ„๋ฆฌ๊ฐ€ ๋œ ์–ด์ƒ‰ํ•ด์กŒ๋‹ค.

์ฒ˜์Œ์—๋Š” โ€œ๊ฐ์ฒด์˜ ์ฑ…์ž„โ€์ด๋ผ๋Š” ๋‹จ์–ด ์ž์ฒด๊ฐ€ ์™€๋‹ฟ์ง€๊ฐ€ ์•Š์•„์„œ ์ฑ…์ž„์„ ๋ถ„๋ฆฌํ•˜๋Š”๊ฒŒ ๊ต‰์žฅํžˆ ์–ด์ƒ‰ํ–ˆ๋‹ค.
๊ทธ๋ž˜์„œ ์„ค๊ณ„๊ฐ€ ๋‚˜์ค‘์— ๊ฐ€๋ฉด ๋’คํ‹€์–ด์ง€๊ณ  ๋Œ€๊ทœ๋ชจ ๊ณต์‚ฌ๋ฅผ ํ•˜๋Š”โ€ฆ๊ทธ๋Ÿฐ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์—ˆ๋Š”๋ฐ ์ง€๊ธˆ์€ ๊ธฐ๋Šฅ ํ•˜๋‚˜, ๊ฐ์ฒด ํ•˜๋‚˜๊ฐ€ ์ถ”๊ฐ€๋  ๋•Œ๋งˆ๋‹ค ์ฑ…์ž„๊ณผ ์—ญํ• , ๊ทธ๋ฆฌ๊ณ  ํ˜‘๋ ฅํ•˜๋Š” ๊ฐ์ฒด๋Š” ๋ฌด์—‡์ธ์ง€ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋– ์˜ฌ๋ฆฌ๊ฒŒ ๋๋‹ค.

๊ฐ์ฒด์˜ ์ƒ์„ฑ๊ณผ ์†Œ๋ฉธ

  • ๊ฐ์ฒด๋‚˜ ๋ณ€์ˆ˜๋ฅผ ๋ฏธ๋ฆฌ ์ƒ์„ฑํ•ด๋†“์ง€ ๋ง๊ณ  ์‚ฌ์šฉํ•˜๋Š” scope ์•ˆ์—์„œ ์ƒ์„ฑ๋˜๊ณ  ๋‹ค๋ฅธ scope์—์„œ ์‚ฌ์šฉ๋  ์ผ์ด ์—†์œผ๋ฉด ํ•ด๋‹น scope์•ˆ์—์„œ ์†Œ๋ฉธ๋˜๋„๋ก ์‚ฌ์šฉํ•˜๋Š” ์Šต๊ด€์„ ๊ธธ๋Ÿฌ์•ผ ํ•œ๋‹ค.
    ์˜ˆ๋ฅผ๋“ค์–ด mainํŒŒ์ผ์—์„œ ์Šต๊ด€์ ์œผ๋กœ ์ƒ์œ„์— ๋ชจ๋“  ์ธ์Šคํ„ด์Šค๋ฅผ ๋‹ค ์„ ์–ธํ•ด๋†“๊ณ  ์•„๋ž˜์ชฝ์—์„œ ์ธ์Šคํ„ด์Šค.๋ฉ”์„œ๋“œํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š”๋ฐ ์ ์–ด๋„ ์‚ฌ์šฉํ•˜๋Š” ์‹œ์ ์— ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“œ๋Š” ์Šต๊ด€์„ ๋“ค์ด์ž. (์‹ฌ์ง€์–ด do-catch๋ฌธ ์•ˆ์—์„œ๋„ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•„์š”ํ•˜๋ฉด ๊ทธ๋ ‡๊ฒŒ ํ•˜์ž.)
  • ๋‹จ์ง€ ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๊ฐ’์ด ํ•„์š”ํ•  ๋ฟ์ด๋ผ๊ณ ํ•ด์„œ ๊ฐ์ฒด๋ฅผ ๋˜ ์ƒ์„ฑํ•  ํ•„์š”๋Š” ์—†๋‹ค. ๊ฐ์ฒด๋Š” ํ•„์š”ํ•  ๋•Œ๋งŒ ์ƒ์„ฑํ•˜๊ณ  ํ”„๋กœํผํ‹ฐ๊ฐ’์„ ๊ฐ์ฒด ์ƒ์„ฑ ์—†์ด ๊ฐ€์ ธ์˜ฌ ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”์ง€ ๊ณ ๋ฏผํ•˜๊ณ  ๊ฐ์ฒด๋ฅผ ์ƒˆ๋กœ ๋˜ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์ตœ๋Œ€ํ•œ ๋ฐฐ์ œํ•˜์ž.

์—๋Ÿฌ์ฒ˜๋ฆฌ

  • do-try-catch๋ฅผ ํ•œ๊บผ๋ฒˆ์— ๋‹ค ์“ฐ์ง€ ๋ง๊ณ  ํ•˜๋‚˜์˜ ์—๋Ÿฌ์ผ€์ด์Šคenum์— ํ•˜๋‚˜์˜ do-try-catch๊ฐ€ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  • ์—๋Ÿฌ์ฒดํฌ๋ฅผ ํ• ๋•Œ๋Š” ์Šต๊ด€์ ์œผ๋กœ if-else๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋ณด๋‹ค๋Š” ๋งŒ์•ฝ ์—๋Ÿฌ์ฒ˜๋ฆฌํ•˜๊ณ  ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ๋๋‚ด๋Š” ๋กœ์ง์ด ์ž์—ฐ์Šค๋Ÿฝ๋‹ค๋ฉด guard๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์Šต๊ด€์„ ๋“ค์ด๋Š”๊ฒŒ ๋” ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค. guard ๋” ์ž์—ฐ์Šค๋Ÿฝ๋‹ค.
  • ์—๋Ÿฌ์ฒดํฌ๋ฅผ ํ•˜๋Š” ํ•จ์ˆ˜ ์ด๋ฆ„์„ ์ง๊ด€์ ์œผ๋กœ ์ง“์ž.
    ๋‚˜๋Š” invalid- ๋กœ ์ด๋ฆ„์„ ์ •ํ•ด์„œ true์ผ๋•Œ ์—๋Ÿฌ๋ฅผ throwํ•˜๊ณ  false์ผ๋•Œ๊ฐ€ ์ •์ƒ์ผ€์ด์Šค์ผ ๊ฒฝ์šฐ๋กœ ์งฐ๋Š”๋ฐ(if !invalid() {return value} ์ด๋Ÿฐ์‹์œผ๋กœโ€ฆ) ๋‚˜ ๋ง๊ณ  ๋‹ค๋ฅธ์‚ฌ๋žŒ์€ ์ดํ•ดํ•˜๊ธฐ ํž˜๋“ค๊ฒƒ์ด๋ผ๋Š” ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ›์•˜๋‹ค. ์˜คํžˆ๋ ค ์ง๊ด€์ ์œผ๋กœ isValid()- ์ฒ˜๋Ÿผ ์ด๋ฆ„์„ ์ง“๊ณ  ๋กœ์ง์„ ๋ฐ˜๋Œ€๋กœ ํ•˜๋‹ˆ๊นŒ guard๋ฌธ์œผ๋กœ ๋‹จ์ˆœํ™” ํ•˜๋Š” ๊ฒƒ๋„ ์‰ฝ๊ณ  ๋” ์ฝ๊ธฐ ์‰ฌ์šด ์ฝ”๋“œ๊ฐ€ ๋๋‹ค.

๋ถ€์กฑํ–ˆ๋˜ ๊ฒƒ

  • ์ขŒํ‘œ๊ณ„์‚ฐ๊ธฐ ๋กœ์ง์— ๋งž๋Š”์ง„ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ์ƒ์†์„ ์ ์šฉํ–ˆ๋‹ค๋ฉด ์–ด๋• ์„๊นŒ ํ•˜๋Š” ์ƒ๊ฐ์ด ๋“ ๋‹ค.(โ€˜์  > ์ง์„  > ์‚ผ๊ฐํ˜• > ์‚ฌ๊ฐํ˜•โ€™์˜ ํ๋ฆ„์ด๊ธฐ๋•Œ๋ฌธ์—. ์ ์ด ๋ชจ๋“  ๋„ํ˜•์„ ํฌ๊ด„ํ•˜๋Š” ๊ฐ€์žฅ ํฐ ๊ฐœ๋…์ด๋‹ค.)
  • Set์˜ ์‚ฌ์šฉ : ์ขŒํ‘œ๊ฐ’์ด ์„œ๋กœ ๊ฐ™์€ ์ขŒํ‘œ๊ฐ’์€ ์—†๋Š”์ง€ ์ฒดํฌํ•ด์•ผํ–ˆ์—ˆ๋Š”๋ฐ Set ํƒ€์ž…์œผ๋กœ ์ขŒํ‘œ๋ฅผ ๋‹ด์œผ๋ฉด ์‰ฝ๊ฒŒ ์ฒ˜๋ฆฌ๊ฐ€ ๋์„ํ…๋ฐ ํ•˜๋Š” ์•„์‰ฌ์›€์ด ์žˆ๋‹ค.
  • ํ•„์š”ํ•œ ํด๋ž˜์Šค๋‚˜ ๋ฉ”์„œ๋“œ์˜ ์žฌ์ •์˜ : Equatableํ”„๋กœํ† ์ฝœ์„ ์˜ค๋ฒ„๋ผ์ด๋“œํ•ด์„œ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ ์˜ค๋ฒ„๋ผ์ด๋“œ๋ฅผ ํ•˜๋Š” ์ปจ์…‰์ด ์ƒ์†Œํ•ด์„œ ๊ฐ„๋‹จํ•œ ์ฝ”๋“œ์˜€๋Š”๋ฐ๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๊ตฌํ˜„๋„, ์‚ฌ์šฉ๋„ ์–ด๋ ค์› ๋‹ค. ๊ทธ๋ฆฌ๊ณ  sortingํ•˜๋Š” ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•ด์„œ Comparableํ”„๋กœํ† ์ฝœ์„ ์˜ค๋ฒ„๋ผ์ด๋“œํ•  ํ•„์š”๊ฐ€ ์žˆ์—ˆ๋Š”๋ฐ ๊ฒฐ๊ตญ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•˜๊ณ  ๋ฏธ์…˜์ด ๋๋‚ฌ๋‹ค.
  • main.swift ํŒŒ์ผ์ด ๊น”๋”ํ•˜์ง€ ๋ชปํ•œ ๊ฒƒ. ์ง€๊ธˆ์€ ๋ฐ˜๋ณต๋ฌธ ๋‚ด์—์„œ ์—๋Ÿฌ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š” ์‹์œผ๋กœ ๋˜์–ด์žˆ๋Š”๋ฐ ๋ฉ”์„œ๋“œ๋กœ๋ผ๋„ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋Š” ๋กœ์ง์„ ๋ถ„๋ฆฌํ–ˆ์œผ๋ฉด ๋” ๊น”๋”ํ–ˆ์„ ๊ฒƒ ๊ฐ™๋‹ค.
  • ์œ ๋‹›ํ…Œ์ŠคํŠธ๋ฅผ ์ œ๋Œ€๋กœ ํ•˜์ง€ ๋ชปํ•œ ๊ฒƒ. ์ด์ƒ์ ์ด๊ฒŒ๋Š” ํ•จ์ˆ˜ ํ•˜๋‚˜ ์ถ”๊ฐ€ํ• ๋•Œ๋งˆ๋‹ค ํ…Œ์ŠคํŠธ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผํ•˜๋Š”๋ฐ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๊ฐ€๋‹ค๋ณด๋ฉด ๊ทธ ํ๋ฆ„์„ ๋Š๊ณ  ํ…Œ์ŠคํŠธ์ฝ”๋“œ๋ฅผ ์งœ๊ธฐ ์–ด๋ ต๋‹ค.
  • ์ปค๋ฐ‹๋‹จ์œ„๋ฅผ ์ž˜๊ฒŒ ์ชผ๊ฐœ์ง€ ๋ชปํ•œ ๊ฒƒ. ์‹ ๊ฒฝ์จ์„œ ํ•˜๊ธด ํ–ˆ์ง€๋งŒ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ํ•˜๋‹ค๋ณด๋ฉด ๊ณ„์† ์ด์–ด์„œ ํ•˜๊ฒŒ๋๋‹คโ€ฆ
  • ์ปค๋ฐ‹๋ฉ”์‹œ์ง€๋ฅผ ๊ธธ๊ฒŒ ์“ด๊ฒƒ ๊ฐ™๋‹ค. ๋ช…ํ™•ํ•˜๊ฒŒ ์“ฐ๋Š”๊ฒŒ ์ข‹๋‹ค๊ณ  ํ•ด์„œ ์ผ๋Š”๋ฐ ๋„ˆ๋ฌด ๊ตฌ์ฒด์ ์œผ๋กœ ์“ด๊ฑด ์•„๋‹Œ๊ฐ€ ์‹ถ๋‹ค.

์•ž์œผ๋กœ ํ•  ๊ฒƒ

  • ๊ฐ์ฒด๋Š” ํ•„์š”ํ•œ ๊ณณ์—์„œ ์„ ์–ธํ•˜๊ณ  ๊ณผ๋„ํ•˜๊ฒŒ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ธฐ
  • main.swift ๋‚ด์˜ ๋กœ์ง์„ ๋‹จ์ˆœํ™”ํ•ด๋ณด๊ธฐ
  • ์—๋Ÿฌ์ฒ˜๋ฆฌ ์‹œ ์Šต๊ด€์ ์œผ๋กœ if-else๋งŒ ์“ฐ์ง€ ์•Š๊ณ guard๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ
  • ์—๋Ÿฌ์ฒ˜๋ฆฌ ์‹œ do-try-catch๋ฅผ ํ•œ ์—๋Ÿฌํƒ€์ž… ๋‹น ํ•˜๋‚˜์˜ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜๊ธฐ
  • ๊ฐ์ฒด์˜ ํ˜‘๋ ฅ์„ ๊ฑด๋„ˆ๋›ฐ๊ฑฐ๋‚˜ ๊ฑฐ์Šฌ๋Ÿฌ์˜ฌ๋ผ๊ฐ€์ง€ ์•Š๊ธฐ : ๋˜‘๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ผ๋„ ํ˜„์žฌ ํ˜‘๋ ฅํ•˜๊ณ  ์žˆ๋Š” ๊ฐ์ฒด์—๊ฒŒ ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•ด์•ผ์ง€ ํ˜‘๋ ฅํ•˜๊ณ  ์žˆ์ง€ ์•Š์€ ๊ฐ์ฒด์—๊ฒŒ์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„๋Š” ํ˜•ํƒœ๊ฐ€ ๋˜๋ฉด ์˜์กด์„ฑ์ด ๋†’์•„์ง
  • ๊ตฌ์กฐ์ฒด๋‚˜ ํด๋ž˜์Šค ์ด๋ฆ„์€ -ing ํ˜•ํƒœ๋ณด๋‹ค๋Š” ์˜์ธํ™”(๋งˆ์น˜ ์‚ฌ๋žŒ์ฒ˜๋Ÿผ) Manager, Checker, Player ํ˜•ํƒœ๋กœ ๋„ค์ด๋ฐํ•˜๋Š”๊ฒŒ ๋ณดํŽธ์ ์ž„
  • computed property๋ฅผ ์‚ฌ์šฉํ–ˆ๋˜ ๊ฒƒ ์ฒ˜๋Ÿผ ํ”„๋กœํผํ‹ฐ๊ฐ€ ํŠน์ •ํ•œ ๋กœ์ง์œผ๋กœ ๊ณ„์‚ฐ๋˜์–ด์•ผ ํ• ๋•Œ๋Š” get๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“ค์ง€ ๋ง๊ณ  getter ํ”„๋กœํผํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ
  • ์ปค๋ฐ‹๋‹จ์œ„๋ฅผ ์ž‘๊ฒŒ ๋‚˜๋ˆ ์„œ ์ปค๋ฐ‹ํ•˜๊ธฐ : ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋  ๋•Œ๋งˆ๋‹ค ํ™•์ธํ•˜๊ณ  ์ปค๋ฐ‹ํ•˜๊ธฐ!
  • ์œ ๋‹›ํ…Œ์ŠคํŠธ ์Šต๊ด€ํ™”ํ•˜๊ธฐ

TIL_20171127 ~ 20171202

|

์ด๋ฒˆ ์ฃผ์— ๋ฐฐ์šด / ๋Š๋‚€ ๊ฒƒ

  • ๊ฑฐ์˜ ์ขŒํ‘œ๊ณ„์‚ฐ๊ธฐ ๋ฏธ์…˜์—๋งŒ ๋งค๋‹ฌ๋ ธ๋˜ ํ•œ ์ฃผ ์˜€๋‹คโ€ฆ!

  • ๋ฐ˜๋ณต๋ฌธโ€ฆ
    • ๋ฐ˜๋ณต๋ฌธ ์•ˆ์˜ ์กฐ๊ฑด๋ฌธ์„ ์“ธ๋•Œ ์ฐฉ๊ฐํ•ด์„œ ๋‚ด๊ฐ€ ์ƒ๊ฐํ–ˆ๋˜ ๊ฒƒ๋ณด๋‹ค ๋” ๋ฐ˜๋ณต์ด ๋œ๋‹ค๋˜์ง€, ๋œ ๋œ๋‹ค๋˜์ง€ ํ•˜๋Š” ์‹ค์ˆ˜๊ฐ€ ์žฆ์•˜๋‹ค. ์˜ˆ๋ฅผ๋“ค๋ฉด Array์— ๊ฐ’์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•˜๋Š”๋ฐ ์ž๊พธ๋งŒ ๋งˆ์ง€๋ง‰ ๊ฐ’๋งŒ ๋“ค์–ด๊ฐ€๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์–ด์„œ ๋””๋ฒ„๊น…์„ ์ด๋ฐฉ๋ฒ• ์ €๋ฐฉ๋ฒ•์œผ๋กœ ํ–ˆ๋Š”๋ฐ ์•Œ๊ณ ๋ณด๋‹ˆ for๋ฌธ scope๋ฐ–์—์„œ .append๋ฅผ ํ–ˆ๋˜ ๋ฌธ์ œ์˜€๋‹ค. ๋ฐ˜๋ณตํ•ด์„œ ํŠน์ • ์กฐ๊ฑด์— ๋”ฐ๋ผ์„œ ์ฒ˜๋ฆฌํ•ด์•ผํ•˜๋Š” ๋กœ์ง์—์„œ๋Š” scope์— ์ฃผ์˜ํ•˜๊ณ  ์กฐ๊ฑด๋ฌธ์— ๊ฑธ๋ฆฌ์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์— ๋ฐ˜๋ณต๋ฌธ ๋‚ด์— ์žˆ๋Š” ๋ชจ๋“  ์ฝ”๋“œ๋Š” ๋ฐ˜๋ณต๋œ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๊ผญ๊ผญ ๊ธฐ์–ตํ•ด์•ผ๊ฒ ๋‹ค!
    • ์ขŒํ‘œ๊ณ„์‚ฐ๊ธฐ ๋ฏธ์…˜์˜ mainํŒŒ์ผ์— while๋ฌธ ์ถ”๊ฐ€ : while๋ฌธ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์ข…๋ฃŒ์กฐ๊ฑด์„ ์ƒˆ๋กœ ์ถ”๊ฐ€ํ•˜๋ฉด์„œ, ์›๋ž˜ ์—๋Ÿฌ์ฒ˜๋ฆฌ๋„ ํ•˜๋˜ ๋กœ์ง์ด๋ผ์„œ ์ข€ ๊นŒ๋‹ค๋กœ์› ๋Š”๋ฐ ์•ž์œผ๋กœ ๋ฏธ์…˜ ๋งŒ๋“ค๋ฉด์„œ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰๊ณผ ์ข…๋ฃŒ์—๋Š” ์ข…๋ฃŒ์กฐ๊ฑด์„ ์ถ”๊ฐ€ํ•ด์„œ ์—ฐ์Šต์€ ๊ณ„์†ํ•ด์•ผ๊ฒ ๋‹ค.
  • ํ”„๋กœํ† ์ฝœ
    • MyPoint์ฒ˜๋Ÿผ ๋งŒ๋“  ๊ฐ์ฒด๋ฅผ Equatable ํ”„๋กœํ† ์ฝœ์„ ์ค€์ˆ˜ํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์„œ ํ•„์š”ํ•œ๋Œ€๋กœ ์‚ฌ์šฉํ–ˆ๋‹ค. ํ”„๋กœํ† ์ฝœ๊ฐ™์ด ์ฒ˜์Œ์— ์ดํ•ด๊ฐ€ ๋ชจํ˜ธํ•˜๊ฒŒ ๋๋˜ ๊ฐœ๋…๋“ค์€ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์ ์  ๋” ์ต์ˆ™ํ•ด์ง€๋Š”๊ฒƒ๊ฐ™๋‹ค.
    • ํ”„๋กœํ† ์ฝœ ์ปดํฌ์ง€์…˜ : ์›๋ž˜ ํ•˜๋‚˜์˜ ํ”„ํ† ์ฝœ๋กœ ์ปค๋ฒ„ํ•  ์ˆ˜ ์žˆ๋˜ ๊ฐ์ฒด๋“ค์ด ๊ธฐ๋Šฅ์ด ์ ์  ์ถ”๊ฐ€๋˜๋ฉด์„œ, ํ•˜๋‚˜์˜ ํ”„๋กœํ† ์ฝœ๋กœ ์™„๋ฒฝํžˆ ์ถ”์ƒํ™”๊ฐ€ ์–ด๋ ค์›Œ์กŒ๋‹ค. ์ด๋Ÿฐ๊ฒฝ์šฐ, ์•„์˜ˆ ๊ณตํ†ต๋˜๋Š” ๊ธฐ๋Šฅ๋งŒ์œผ๋กœ ํ”„๋กœํ† ์ฝœ์„ ํ•˜๋‚˜ ๋” ์ƒ์„ฑํ•˜๊ณ  ๊ทธ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•œ ๊ฐ์ฒด๋งŒ ์ƒˆ๋กœ์šด ํ”„๋กœํ† ์ฝœ์„ ์ค€์ˆ˜ํ•˜๊ฒŒ ๋‚˜๋ˆ ์„œ ๊ตฌํ˜„ํ•œ๋‹ค.
      • ex)ResultByShape ํ”„๋กœํ† ์ฝœ - ์ถœ๋ ฅ๋˜๋Š” ๊ฒฐ๊ณผ๊ฐ’์˜ ์œ ๋ฌด๊ฐ€ ๊ฐ ๋„ํ˜•๋งˆ๋‹ค ๋‹ฌ๋ผ์„œ MyShapeํ”„๋กœํ† ์ฝœ์ด ๊ฒฐ๊ณผ ์ถœ๋ ฅ๊ณผ ๊ด€๋ จ๋œ ํ•จ์ˆ˜๋ฅผ ๊ฐ–๊ณ ์žˆ๋Š”๊ฒŒ ์ ์ ˆ์น˜ ์•Š์•˜์Œ. ๊ฒฐ๊ณผ ์ถœ๋ ฅ์„ ํ•˜๋Š” ํ•จ์ˆ˜๋งŒ ๋”ฐ๋กœ ResultByShapeํ”„๋กœํ† ์ฝœ์— ์ƒˆ๋กœ ์ •์˜ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•  ํ•„์š”๊ฐ€ ์žˆ๋Š” ๋„ํ˜•๊ฐ์ฒด๋งŒ ์ค€์ˆ˜ํ•˜๊ฒŒ ๊ตฌํ˜„.
        drawPoint()ํ•จ์ˆ˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ํ”„๋กœํ† ์ฝœ ์ปดํฌ์ง€์…˜(MyShape & ResultByShape)๋ฅผ ๋ฐ›๋Š” ๊ฒƒ์œผ๋กœ ์ˆ˜์ •.
  • ์—๋Ÿฌํ•ธ๋“ค๋ง
    • do-catch๋ฌธ์„ ์—๋Ÿฌํƒ€์ž…์— ๋”ฐ๋ผ์„œ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์„ ์‚ฌ์šฉํ•ด๋ณด๋ฉด์„œ ์ข€๋” ์ต์ˆ™ํ•ด์งˆ ์ˆ˜ ์žˆ์—ˆ๋‹ค.
    • ์—๋Ÿฌ์ผ€์ด์Šค enum์„ Errorํ”„๋กœํ† ์ฝœ์„ ์ค€์ˆ˜ํ•˜๋„๋ก ์„ค๊ณ„ํ•ด์„œ ๊ฐ™์€ ํƒ€์ž…์˜ ์—๋Ÿฌ๋ฅผ ๋˜ ์—๋Ÿฌ ์ผ€์ด์Šค์— ๋”ฐ๋ผ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ค‘๋ณต๋˜๊ฒŒ ์ž‘์„ฑํ–ˆ๋˜ catch๋ฌธ์„ case์— ๋”ฐ๋ผ์„œ ์ˆ˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์—ˆ๋‹ค.
  • ์ ˆ๋Œ€๊ฐ’์„ ๊ตฌํ•˜๋Š” ํ”„๋กœํผํ‹ฐ magnitude
  • ์œ ๋‹›ํ…Œ์ŠคํŠธ ํ™œ์šฉ
  • ์—ฐ์‚ฐํ˜• ํ”„๋กœํผํ‹ฐ
  • staticํ™œ์šฉ

์Šค์œ„ํ”„ํŠธ ํ”„๋กœํ† ์ฝœ ๊ธฐ๋ณธ, extension๊ณผ ํ”„๋กœํ† ์ฝœ

|

ํ”„๋กœํ† ์ฝœ

ํ”„๋กœํ† ์ฝœ์€ ํƒ€์ž…์ด ๋งŒ์กฑ์‹œํ‚ฌ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ •์˜ํ•  ๋•Œ ํ•„์š”ํ•˜๋‹ค. ํƒ€์ž…์ด ํ”„๋กœํ† ์ฝœ์„ ๋งŒ์กฑ์‹œํ‚ฌ๋•Œ ํ”„๋กœํ† ์ฝœ์„ ์ค€์ˆ˜ํ•œ๋‹ค๊ณ  ๋งํ•œ๋‹ค.

ํ”„๋กœํ† ์ฝœ์€ ํƒ€์ž… ์ž์ฒด๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์–ด์„œ ํ”„๋กœํ† ์ฝœ ํƒ€์ž…์„ ๊ฐ€์ง€๋Š” ๋ณ€์ˆ˜๋‚˜ ํ•จ์ˆ˜ ์ธ์ˆ˜ ๋ฆฌํ„ด๊ฐ’์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ”„๋กœํ† ์ฝœ์ด ํ•„์š”ํ• ๋•Œ

func printTable(_ data: [[String]], withColumnLabels columnLabels: String...) {
    var firstRow = "|"
    var columnWidths = [Int]()

  ...
  • ์ด ํ•จ์ˆ˜๋Š” ํ–‰๊ณผ ์—ด์ด ๋ช‡ ๊ฐœ์ธ์ง€ ์•Œ์•„์•ผ ํ•œ๋‹ค. ์ธ์ˆ˜๋ฅผ ๋‘ ๊ฐœ ๋ฐ›์•„์„œ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ table์„ ์ถœ๋ ฅํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค. ํ•˜์ง€๋งŒ ํ”„๋กœํ† ์ฝœ์„ ์ด์šฉํ•ด์„œ TableData๋ฅผ ์ •์˜ํ•œ ํ”„๋กœํ† ์ฝœ๋งŒ ๋ฐ›์•„๋„ ์ž‘๋™๋˜๊ฒŒ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ”„๋กœํ† ์ฝœ ์ •์˜

...
protocol TableDataSource {
  var numberOfRows: Int {get}
  var numberOfColumns: Int {get}

  func label(forColumn column: Int) -> String
  func itemFor(row: Int, column: Int) -> String
}

  • get ๋ฌธ๋ฒ•์€ ํ”„๋กœํผํ‹ฐ๊ฐ€ ์ฝ๊ธฐ์šฉ์ด๋ผ๋Š”๋œป์ด๋‹ค.
  • ํ”„๋กœํ† ์ฝœ์€ ํƒ€์ž…์ด ์ด๋Ÿฐ ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์„œ๋“œ๋งŒํผ์€ ๊ฐ€์ ธ์•ผํ•œ๋‹ค๋Š” ์ตœ์†Œ ์š”๊ฑด์„ ์ •์˜ํ•œ๋‹ค. TableDataSource ๋ฅผ ์ค€์ˆ˜ํ•˜๋Š” ํƒ€์ž…๋“ค์€ numberOfRows, numberOfColumnsํ”„๋กœํผํ‹ฐ, label(), itemFor()๋ฉ”์„œ๋“œ๋ฅผ ๋ฐ˜๋“œ์‹œ ๊ตฌํ˜„ํ•ด์•ผํ•œ๋‹ค.

ํ”„๋กœํ† ์ฝœ ์‚ฌ์šฉ

์ •์˜ํ•œ ํ”„๋กœํ† ์ฝœ TableDataSourse๋ฅผ ์ค€์ˆ˜ํ•˜๋Š” Department ๊ตฌ์กฐ์ฒด๋ฅผ ๋งŒ๋“ ๋‹ค. ์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ํ”„๋กœํ† ์ฝœ์„ ์ถ”์ƒํด๋ž˜์Šค์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์„œ, ์ด ๊ตฌ์กฐ์ฒด๋Š” TableDataSourceํƒ€์ž…์ด ๋˜๊ณ  TableDataSourseํƒ€์ž…์ฒ˜๋Ÿผ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค. (ex TableDataSource๋ฅผ ์ธ์ž๋กœ ๋ฐ›๋Š” ํ•จ์ˆ˜์— Department๊ฐ€ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์Œ)

struct Person {
    let name: String
    let age: Int
    let yearOfExperience: Int
}

struct Department: TableDataSource { //TableDataSource ํ”„๋กœํ† ์ฝœ์„ ์ค€์ˆ˜ํ•จ
    let name: String
    var people = [Person]()

    init (name: String) {
        self.name = name
    }

    mutating func add (_ person: Person) {
        people.append(person)
    }

  // ํ”„๋กœํ† ์ฝœ์— ์ •์˜๋œ numberOfRows์™€ numberOfColumns๋Š” {get}๋ฐฉ์‹ ์ฝ๊ธฐ์šฉ ํ”„๋กœํผํ‹ฐ
    var numberOfRows: Int {
        return people.count
    } //var numberOfRows: Int = people.count๊ฐ™์Œ (์ด๋ ‡๊ฒŒ๋Š” ์‚ฌ์šฉ๋ชปํ•จ!)

    var numberOfColumns: Int {
        return 3
    }

  // ์‚ฌ์šฉํ• ๋•Œ column์ˆœ์„œ๋งŒ ์ •ํ•ด์ฃผ๋ฉด ๋งค์นญ๋˜๋Š” ์ผ€์ด์Šค์—์„œ์˜ ๋ฌธ์ž์—ด์„ ๋ฆฌํ„ด
    func label(forColumn column: Int) -> String {
        switch column {
        case 0: return "Employee Name"
        case 1: return "Age"
        case 2: return "Years of Experience"
        default: fatalError("Invalid column")
        }
    }

  // Department์˜ ํ”„๋กœํผํ‹ฐ์ธ Person๋ฆฌ์ŠคํŠธ์—์„œ์˜ person์ •๋ณด๋ฅผ ์กฐํšŒ. ํ–‰/์—ด ๋ฒˆํ˜ธ๋งŒ ์ •ํ•ด์ฃผ๋ฉด ํ•ด๋‹น person๊ฐ์ฒด์˜ ์†์„ฑ์„ ๋ฐ˜ํ™˜  
    func itemFor(row: Int, column: Int) -> String {
        let person = people[row]
        switch column {
        case 0: return person.name
        case 1: return String(person.age)
        case 2: return String(person.yearOfExperience)
        default: fatalError("Invalid column!")
        }
    }
}

extension์— ํ”„๋กœํ† ์ฝœ์ ์šฉ

extension์€ ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ํด๋ž˜์Šค๋‚˜ ๊ตฌ์กฐ์ฒด, ์—ด๊ฑฐํ˜• ๋“ฑ์˜ ๊ฐ์ฒด์— ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋Š” ํ‚ค์›Œ๋“œ์ด๋‹ค.
extension์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‚˜ ํ”„๋ ˆ์ž„์›Œํฌ์— ํฌํ•จ๋˜์–ด ์ง์ ‘ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋Š” ๊ฐ์ฒด๋ผ๋„ ํ™•์žฅ ๊ตฌ๋ฌธ์„ ์ด์šฉํ•˜๋ฉด ์ œ์•ฝ ์—†์ด ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ extension์— ํ”„๋กœํ† ์ฝœ์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
ํ”„๋กœํ† ์ฝœ๊ณผ ๊ด€๋ จ๋œ ํ™•์žฅ์˜ ํŠน์ง• ์ค‘ ํ•˜๋‚˜๋Š” ๊ธฐ์กด ๊ฐ์ฒด๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ ๋„ ํ”„๋กœํ† ์ฝœ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

<String๊ณผ Dictionary์˜ ํ™•์žฅ ๊ตฌ๋ฌธ์— ํ”„๋กœํ† ์ฝœ ๊ตฌํ˜„>

protocol ConvertTarget{

}

extension String: ConvertTarget {

}
extension Dictionary: ConvertTarget {

}
// String๊ณผ Dictionary๋Š” ํ”„๋กœํ† ์ฝœ๋กœ ์ธํ•ด ConvertTargetํƒ€์ž…์œผ๋กœ ํ•œ๊บผ๋ฒˆ์— ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.

Enum(์—ด๊ฑฐํ˜•) - switch-case์™€ ์“ฐ๊ธฐ, ๋ฉ”์„œ๋“œ์™€ ์—ฐ๋™, ์—ฐ๋™๋˜๋Š” ๊ฐ’

|

์—ด๊ฑฐํ˜•

๋ฆฌ์ŠคํŠธ ํ˜•ํƒœ๋กœ ์ •์˜๋œ ์—ฌ๋Ÿฌ ์ผ€์ด์Šค๋กœ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•

enum์€ ํ•œ๋ฒˆ ์ €์žฅํ•ด(๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ ค)๋†“๊ณ  ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด์„œ ์“ฐ์ง€ ์•Š๋Š” ์ƒ์ˆ˜๊ฐœ๋…์ด๊ธฐ๋•Œ๋ฌธ์— static๋ณ€์ˆ˜์ฒ˜๋Ÿผ ์“ฐ์—ฌ ์ธ์Šคํ„ด์Šค ํ”„๋กœํผํ‹ฐ๋กœ ์‚ฌ์šฉํ•˜๋ฉด ์ปดํŒŒ์ผ์—๋Ÿฌ๊ฐ€ ๋‚œ๋‹ค! (์ŠคํŠธ๋ŸญํŠธ์ด๋ฆ„.enumํƒ€์ž…) ์œผ๋กœ ์‚ฌ์šฉ

์—ด๊ฑฐํ˜•์˜ ํƒ€์ž… ์ถ”๋ก 

๋ณ€์ˆ˜์˜ ํƒ€์ž…์ด ์—ด๊ฑฐํ˜•์ด๋ผ๋Š” ๊ฒƒ๋งŒ ์•Œ๊ณ ์žˆ์œผ๋ฉด ์ƒˆ ๊ฐ’์„ ๋Œ€์ž…ํ•  ๋•Œ ํƒ€์ž…์„ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๋‹ค.

...
var alignment = TextAlignment.left
alignment = .right

์ฒ˜์Œ์— alignment๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค๋•Œ๋Š” ์—ด๊ฑฐํ˜•์˜ ํƒ€์ž…๊ณผ ๊ฐ’์„ ์ง€์ •ํ•ด์•ผํ–ˆ์ง€๋งŒ, ๊ทธ ๋‹ค์Œ ํ–‰๋ถ€ํ„ฐ๋Š” ํƒ€์ž…์„ ์ƒ๋žตํ•˜๊ณ  ๊ทธ ํƒ€์ž…์˜ ๋‹ค๋ฅธ ๊ฐ’์œผ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. (๊ฐ’์„ ํ•จ์ˆ˜์— ์ „๋‹ฌํ• ๋•Œ๋‚˜ ๋น„๊ตํ•  ๋•Œ๋„ ์—ด๊ฑฐํ˜• ์ƒ๋žต ๊ฐ€๋Šฅ)

์กฐ๊ฑด๋ฌธ์„ switch๋กœ ์“ฐ๊ธฐ

enum TextAlignment {
    case Left
    case Right
    case Center
    case Justify
}

alignment = .Right //ํƒ€์ž… ์ถ”๋ก 

if alignment == .Right { //๋น„๊ตํ• ๋•Œ๋„ ํƒ€์ž…์ถ”๋ก  ๊ฐ€๋Šฅ
    print("We should right-align the text!")
}

//์—ด๊ฑฐํ˜•์˜ ๊ฐ’์„ if๋ฌธ์—์„œ ๋น„๊ตํ•  ๊ฒฝ์šฐ ๋ณดํ†ต switch๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•จ
switch alignment {
case .Left: print("Left Aligned")
case .Right: print("Right Aligned")
case .Center: print("Center Aligned")
case .Justify: print("Justified")
}
  • switch - case๋ฅผ ์“ธ๋•Œ ์—ด๊ฑฐํ˜•์—์„œ๋Š” default ์ผ€์ด์Šค๋ฅผ ์“ฐ์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.(์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ด๋ฏธ ๋ชจ๋“  ๊ฐ€๋Šฅํ•œ ๊ฐ’์„ ์•Œ๊ณ  ์žˆ๊ธฐ๋•Œ๋ฌธ์—)

๋ฉ”์„œ๋“œ

์Šค์œ„ํ”„ํŠธ์˜ ๋ฉ”์„œ๋“œ๋Š” ์—ด๊ฑฐํ˜•๊ณผ๋„ ์—ฐ๋™๋œ๋‹ค.

// playground(์ „๊ตฌ์ผœ๊ธฐ)

enum Lightbulb {
    case on
    case off

    func surfaceTemperature(forAmbientTemp ambient: Double)-> Double { //Lightbulb์˜ ๋ฉ”์„œ๋“œ
        switch self {
        case .on:
            return ambient + 150.0
        case .off:
            return ambient
        }   
    }   
}

var bulb = Lightbulb.on
let ambientTemperature = 100.0
let bulbOnTemperature = bulb.surfaceTemperature(forAmbientTemp: ambientTemperature)
print(bulbOnTemperature) // 250.0

surfaceTemperatureํ•จ์ˆ˜๋Š” enumํƒ€์ž…์˜ Lightbulb ๋‚ด๋ถ€์— ์„ ์–ธ๋˜์–ด์žˆ์œผ๋ฉฐ, ์ „๊ตฌ๊ฐ€ ์ผœ์ ธ์„œ ์ „๊ตฌ ํ‘œ๋ฉด์˜ ์˜จ๋„๊ฐ€ ์˜ฌ๋ผ๊ฐ€๋ฉด ์ฃผ๋ณ€์˜ ์˜จ๋„๋„ ์˜ฌ๋ผ๊ฐ€๋Š” ๊ฒƒ์„ ํ‘œํ˜„ํ•œ ๋ฉ”์„œ๋“œ์ด๋‹ค.

  • self : self๋Š” Lightbulbํƒ€์ž…์˜ ์•”๋ฌต์ ์ธ ์ธ์ˆ˜. ์Šค์œ„ํ”„ํŠธ์˜ ๋ฉ”์„œ๋“œ๋Š” ์˜ˆ์™ธ์—†์ด self์ธ์ˆ˜๋ฅผ ๊ฐ€์ง€๋Š”๋ฐ, ์ด self๋Š” ํ•ด๋‹น ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๋Š” ์ธ์Šคํ„ด์Šค์— ์—‘์„ธ์Šคํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” Lightbulb์˜ ์ธ์Šคํ„ด์Šค์— ์—‘์„ธ์Šคํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.
// playground(์ „๊ตฌ ์ผœ๊ณ ๋„๊ธฐ)

enum Lightbulb {
    case on
    case off

...


// toggle()ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์ „๊ตฌ๊ฐ€ on์ƒํƒœ์ผ๋•Œ offํ•˜๊ณ , off์ƒํƒœ์ผ๋•Œ๋Š” on.

   mutating func toggle() {
        switch self {
        case .on:
            self = .off
        case .off:
            self = .on
        }
    }
}

var bulb = Lightbulb.on
let ambientTemperature = 100.0
var bulbTemperature = bulb.surfaceTemperature(forAmbientTemp: ambientTemperature)
print(bulbTemperature)


bulb.toggle() // bulb๋Š” .on์ƒํƒœ์˜€์œผ๋‹ˆ๊นŒ ์—ฌ๊ธฐ์„œ toggle์„ ํ˜ธ์ถœํ•ด์„œ off์ƒํƒœ๋กœ ๋ฐ”๊ฟˆ
bulbTemperature = bulb.surfaceTemperature(forAmbientTemp: ambientTemperature)
print("after toggle: \(bulbTemperature)") // after toggle: 100.0

์—ฐ๋™๋˜๋Š” ๊ฐ’


enum ShapeDimensions {
    case square(side: Double)
    case rectangle(width: Double, height: Double)  

    func area() -> Double {
        switch self {
        case let .square(side: s):
            return s * s
        case let .rectangle(width: w, height: h):
            return w * h
        }
    }
}

// ShapeDimensions์˜ ์—ฐ๋™๊ฐ’์„ ๋งŒ๋“ค๋ ค๋ฉด ํ•ด๋‹น ์ผ€์ด์Šค์™€ ๊ทธ์— ๋”ฐ๋ฅธ ์ ์ ˆํ•œ ์—ฐ๋™๊ฐ’์„ ์ง€์ •ํ•ด์•ผํ•œ๋‹ค.
var squareShape = ShapeDimensions.square(side: 10.0) // ํ•œ๋ณ€ ๊ธธ์ด 10.0์ธ ์ •์‚ฌ๊ฐํ˜• ์ƒ์„ฑ
var squareShape2 = ShapeDimensions.square(side: 5.0) // ํ•œ๋ณ€ ๊ธธ์ด 5.0์ธ ์ •์‚ฌ๊ฐํ˜• ์ƒ์„ฑ
print(squareShape.area()) // 100.0
print(squareShape2.area()) // 25.0
var rectangleShape = ShapeDimensions.rectangle(width: 5.0, height: 10.0) // ์ง์‚ฌ๊ฐํ˜• ์ƒ์„ฑ
print(rectangleShape.area()) // 50.0
  • ShapeDimensions์—์„œ
    • ์ •์‚ฌ๊ฐํ˜•์˜ ์—ฐ๋™๊ฐ’์€ ํ•œ ๋ณ€์˜ ๊ธธ์ด
    • ์ง์‚ฌ๊ฐํ˜•์˜ ์—ฐ๋™๊ฐ’์€ ๊ทธ ๋„ˆ๋น„์™€ ๋†’์ด - ํŠœํ”Œ๋กœ width์™€ height
  • let: switch์˜ ์ผ€์ด์Šค๋“ค์˜ self์˜ ์—ฐ๋™๊ฐ’์„ ์ƒˆ ๋ณ€์ˆ˜์— ๋ฐ”์ธ๋”ฉํ•˜๊ธฐ์œ„ํ•ด ์‚ฌ์šฉ. ์—ฐ๋™๊ฐ’์„ ์ฃผ๊ณ  ๊ทธ์— ๋”ฐ๋ผ์„œ ShapeDimensionsํƒ€์ž…์˜ ์ผ€์ด์Šค๋ฅผ ๋งŒ๋“ค์–ด๋‚ด๋Š”๋ฐ, ์ฃผ์–ด์ง„ ์—ฐ๋™๊ฐ’์ด ๋ณ€๋™๋์„๋•Œ๋„ ๋”ฑ ๊ทธ๋•Œ ํ˜ธ์ถœ๋œ ์ผ€์ด์Šค์— ์ œ๋Œ€๋กœ ๋ฐ”์ธ๋”ฉ๋œ ๊ฐ’๋งŒ ์ฃผ๋ ค๊ณ  let์œผ๋กœ ์ƒ์ˆ˜ ๋ฐ”์ธ๋”ฉ์„ ์‹œํ‚ค๋Š”๊ฒƒ! let์ด ์—†์œผ๋ฉด ์ปดํŒŒ์ผ์—๋Ÿฌ๊ฐ€ ๋‚˜๋Š”๋ฐ, ๋งŒ์•ฝ var squareShape = ShapeDimensions.square(side: 10.0)๋‚˜ var squareShape2 = ShapeDimensions.square(side: 5.0)์ฒ˜๋Ÿผ ์—ฐ๋™๊ฐ’์„ ๋‹ค๋ฅด๊ฒŒ ํ•ด์„œ ํ˜ธ์ถœํ–ˆ์„๋•Œ ๋ฐ”์ธ๋”ฉ์„ ์•ˆํ•ด์ฃผ๋ฉด ๋‘ ๋ฒˆ ๋‹ค ํ•˜๋‚˜์˜ ๊ฐ™์€ ์—ฐ๋™๊ฐ’์ด ์ ์šฉ๋ ์ˆ˜๋„ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋ง‰์•„๋†“์€๊ฒƒ ๊ฐ™์Œ. (let์€ ์–ด์จŒ๋“  ์—ฐ๋™๊ฐ’์œผ๋กœ ๋“ค์–ด์˜จ s, w, h๋ฅผ ๋ฐ”์ธ๋”ฉํ•˜๊ธฐ์œ„ํ•จ์ž„. ๋‚ด์ผ ์„ค๋ช…์„ ๋“ฃ๊ณ  ๋” ๋งค๋„๋Ÿฝ๊ฒŒ ์ •๋ฆฌํ•ด์•ผ๊ฒ ๋‹ค.) enum์— ์—ฐ๊ด€๊ฐ’์ด ์žˆ์„๋•Œ ์—ฐ๊ด€๊ฐ’์ด ๋ฌด์—‡์ธ์ง€๋„ ์•Œ์•„์•ผํ•˜๊ณ  ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ•œ๋ฒˆ ๋” ๋น„๊ตํ•ด์„œ ๊ฐ’์„ ๊บผ๋‚ธ๋‹ค๋Š” ๊ฐœ๋…