ZZBAE / ios-bank-manager

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

🏦 은행 창ꡬ λ§€λ‹ˆμ €

πŸ’Ύ ν”„λ‘œμ νŠΈ μ €μž₯μ†Œ

ν”„λ‘œμ νŠΈ κΈ°κ°„ : 2022-06-27 ~ 2022-06-30 μ†Œκ°œ : 은행에 온 고객의 업무λ₯Ό μ²˜λ¦¬ν•˜λŠ” 은행 창ꡬ λ§€λ‹ˆμ €λ₯Ό κ΅¬ν˜„ν•˜μ˜€μŠ΅λ‹ˆλ‹€. 리뷰어 : 제이슨

πŸ‘₯ νŒ€μ›

재재 λ‚˜μ΄λ“ λ³„
Github Github

πŸ•– νƒ€μž„λΌμΈ: μ‹œκ°„ 순으둜 ν”„λ‘œμ νŠΈμ˜ μ£Όμš” 진행 척도λ₯Ό ν‘œμ‹œ

Week 1

  • 2022-06-27(μ›”)

    • 곡개된 ν”„λ‘œμ νŠΈ STEP1에 λŒ€ν•΄ λ…Όμ˜ν•˜κ³ , 전체적인 ν”„λ‘œμ νŠΈμ˜ 청사진 수립
  • 2022-06-28(ν™”) - STEP1 PR

    • STEP1 진행: λ…Έλ“œ, μ—°κ²° 리슀트, 큐 자료ꡬ쑰 κ΅¬ν˜„
  • 2022-06-29(수)

    • 리뷰어 제이슨과 ν•¨κ»˜ STEP 1 리뷰
    • STEP2 진행 λ°©ν–₯ λ…Όμ˜
  • 2022-06-30(λͺ©)

    • STEP2 진행: 은행원과 고객 λͺ¨λΈ μž‘μ„±, 은행 λ§€λ‹ˆμ € 컨트둀러 μž‘μ„±
  • 2022-07-01(금)

    • Readme.md μž‘μ„±

✏️ ν”„λ‘œμ νŠΈ λ‚΄μš©

πŸ’» 핡심 κΈ°λŠ₯ κ²½ν—˜

  • Linked-list 자료ꡬ쑰의 이해 및 κ΅¬ν˜„
  • Queue 자료ꡬ쑰의 이해 및 κ΅¬ν˜„
  • Generics κ°œλ…μ΄ν•΄ 및 적용
  • Queue의 ν™œμš©
  • νƒ€μž… 좔상화 및 μΌλ°˜ν™”

βš™οΈ κ΅¬ν˜„ κΈ°λŠ₯

  • BankManagerConsoleApp
    • main : BankManager μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜κ³  μ‹œμž‘ λ©”μ„œλ“œλ₯Ό μ‹€ν–‰
  • Model
    • CustomerQueue : 큐 ν”„λ‘œν† μ½œμ„ μ±„νƒν•œ, 고객 λŒ€κΈ°μ—΄μ„ λ‚˜νƒ€λ‚΄λŠ” μ—°κ²° 리슀트
    • Client : 고객 λͺ¨λΈ. λŒ€κΈ°λ²ˆν˜Έ ν”„λ‘œνΌν‹°λ₯Ό 가지고 있음
    • Clerk : 은행원 λͺ¨λΈ. μ„œλΉ„μŠ€ 제곡 λ©”μ„œλ“œλ₯Ό 가지고 있음
  • Controller
    • BankManager : ν”„λ‘œκ·Έλž¨μ˜ μˆ˜ν–‰μ„ μ „λ°˜μ μœΌλ‘œ μ»¨νŠΈλ‘€ν•΄μ£ΌλŠ” 객체
  • Utilities
    • Protocols
      • Queue : 큐 μžλ£Œκ΅¬μ‘°κ°€ μˆ˜ν–‰ν•΄μ•Ό ν•  κΈ°λŠ₯ κ΅¬ν˜„ (isEmpty, peek, enqueue, dequeue, clear)
    • Node : μ—°κ²° 리슀트의 각 λ…Έλ“œλ₯Ό κ΅¬ν˜„
    • LinkedList : λ…Έλ“œλ₯Ό μ—°κ²°ν•¨μœΌλ‘œμ¨ μ΄λ£¨μ–΄μ§€λŠ” 단방ν–₯ μ—°κ²° 리슀트 κ΅¬ν˜„
  • CustomerQueueTests
    • CustomerQueueTests : 고객 λŒ€κΈ°μ—΄ 큐의 각 λ©”μ„œλ“œμ— λŒ€ν•œ ν…ŒμŠ€νŠΈ μ½”λ“œ

πŸ€ TroubleShooting

  1. defer { }

    deferλŠ” ν•¨μˆ˜κ°€ returnκΉŒμ§€ ν•œ 후에 μ‹€ν–‰λ˜λŠ” ν΄λ‘œμ €μž…λ‹ˆλ‹€. μž‘μ„±λœ μœ„μΉ˜μ™€ 상관 없이 ν•¨μˆ˜ μ’…λ£Œ 직전에 μ‹€ν–‰λ˜λŠ” ꡬ문이기 λ•Œλ¬Έμ—, BankManager클래슀 μ•ˆμ— issueTickets와 startwork private λ©”μ„œλ“œ μ•ˆμ— 싀행될 수 있게 μΆ”κ°€ν•΄μ£Όμ—ˆμŠ΅λ‹ˆλ‹€.

  2. usleep -> Thread.sleep(forTimeInterval: 0.7)

    각 고객의 은행 업무λ₯Ό μ‹œμž‘ν•˜κ³  μ™„λ£Œν•˜κΈ°κΉŒμ§€ 0.7초의 μ‹œκ°„μ„ μ„€μ •ν•΄μ€˜μ•Ό ν•˜λŠ” λΆ€λΆ„μ΄μ˜€λŠ”λ°, usleepμ΄λΌλŠ” λ©”μ„œλ“œλ₯Ό μ•Œκ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€. Cμ—μ„œ μœ λž˜ν•œ Threadλ₯Ό μž¬μš°λŠ” λ©”μ„œλ“œλΌμ„œ swiftμ—μ„œ μ‚¬μš©μ€ κ°€λŠ₯ν•œ 것 κ°™μœΌλ‚˜ Thread.sleep(forTimeInterval: μ‹œκ°„) 을 지ν–₯ν•œλ‹€κ³  ν•˜μ—¬ λ©”μ„œλ“œλ₯Ό λ³€κ²½ν•΄μ£Όμ—ˆμŠ΅λ‹ˆλ‹€. usleep을 μ‚¬μš©ν–ˆμ„ λ•Œ, 기쀀을 1000000으둜 μž‘μ•„μ•Όν•˜λŠ” μƒμˆ˜λ₯Ό λ”°λ‘œ μ„€μ •ν•΄μ£Όμ—ˆλŠ”λ°, Thread.sleep(forTimeInterval:) λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜λ‹ˆ λ”°λ‘œ 섀정해쀄 ν•„μš”κ°€ μ—†μ–΄μ„œ μ½”λ“œκ°€ μ „λ°˜μ μœΌλ‘œ 깔끔해지고 가독성도 생긴 것 κ°™μŠ΅λ‹ˆλ‹€.


μ°Έκ³ ν•œ νŽ˜μ΄μ§€

Swift Language Guide - Inheritance
Swift Language Guide - Closures
Swift Language Guide - Generics

About


Languages

Language:Swift 100.0%