- μκ°
- νμ
- νμλΌμΈ
- μκ°νλ νλ‘μ νΈ κ΅¬μ‘°
- μ€ν νλ©΄
- νΈλ¬λΈ μν
- ν΅μ¬ κ²½ν
- μ°Έκ³ λ§ν¬
- μν μ 무 μ²λ¦¬ νλ‘μΈμ€λ₯Ό ꡬνν ConsoleApp
- μν μ 무 μ²λ¦¬ νλ‘μΈμ€λ₯Ό μκ°μ μΌλ‘ ννν UIApp
[STEP-1]
- 2022.10.31
- νλ‘μ νΈ μ΄κΈ° μ€μ
- μ¬μ©μ λκΈ° Queue νμ ν μ€νΈ μ½λ μμ±
- 2022.11.01
- SwiftLint μ μ©
- μ¬μ©μ λκΈ° Queue νμ ꡬν
[STEP-2]
- 2022.11.03
- Console Manager νμ ꡬν λ° λ©μλ ꡬν
- Bank Manager νμ ꡬν λ° λ©μλ ꡬν
- Bank νμ ꡬν λ° λ©μλ ꡬν
- μ½λ 리ν©ν λ§
- 2022.11.07
- μ½λ 리ν©ν°λ§
[STEP-3]
- 2022.11.08
- Costomer νμ μ νλ‘νΌν° μΆκ°
- BankProcessing νλ‘ν μ½ μ μ λ° κΈ°λ³Έ ꡬν
- BankOperation νμ ꡬν λ° λ©μλ ꡬν
- μμ μ²λ¦¬ λ°©μμ Dispatch -> OperationμΌλ‘ μμ
- Bank νμ μΆκ° ꡬν
- μμ μκ°μ κ³μ°νλ λ©μλ ꡬν
- νλ‘μ νΈ λ° μ½λ 리ν©ν λ§
[STEP-4]
- 2022.11.10
- Mainνλ©΄μ ꡬμ±νλ UIμμ νμΌ κ΅¬ν
- ConsoleAppμμ ꡬνν νμΌμ UIAppμ μΆκ°
- UIAppμμ λΆνμν νμΌ μ κ±° λ° ν΅ν©
- κ³ κ° μ 무 μν λ©μλ ꡬν
- UI μ λ°μ΄νΈ λ©μλ ꡬν
- BankManagerConsoleApp
BankManagerConsoleApp
βββ BaseDataStruct
βΒ Β βββ CustomerQueue.swift
βΒ Β βββ LinkedList.swift
βΒ Β βββ Node.swift
βββ Manager
βββ Model
βΒ Β βββ Bank.swift
βΒ Β βββ BankBusiness.swift
βΒ Β βββ BankOperationProcessing.swift
βΒ Β βββ BankerOperation.swift
βΒ Β βββ Customer.swift
βββ main.swift
- BankManagerUIApp
BankManagerUIApp
βββ AppDelegate.swift
βββ Base.lproj
βββ Info.plist
βββ SceneDelegate.swift
βββ View
βΒ Β βββ BankView.swift
βΒ Β βββ Base.lproj
βΒ Β βΒ Β βββ LaunchScreen.storyboard
βΒ Β βΒ Β βββ Main.storyboard
βΒ Β βββ CustomerLineScrollView.swift
βΒ Β βββ QueueLabelStackView.swift
βΒ Β βββ UserTopButtonStackView.swift
βΒ Β βββ WorkTimeLabelStackView.swift
βββ ViewController
βββ BankViewController.swift
-
ν νμ ꡬν ν ν μ€νΈ μνκ²°κ³Ό
-
νλͺ μ μνμμ΄ μ 무λ₯Ό μ²λ¦¬νλ κ³Όμ
-
λλͺ μ μκΈ μνμκ³Ό νλͺ μ λμΆ μνμμ΄ λΉλκΈ°μ μΌλ‘ μ²λ¦¬νλ κ³Όμ
-
UIApp ꡬν νλ©΄ (λ―Έμμ±)
DispatchQueueμ μ¬μ©
- μꡬμ¬ν μ€
μνμλ nλͺ μ μνμμ΄ κ·Όλ¬΄νκ³ , νλͺ μ μνμλ§μ΄ 창ꡬ μ 무λ₯Ό νλ€.
λΌλ 문ꡬλ₯Ό μ΄ν΄λλ κ²μμ μ΄λ €μμ λλ κ² κ°λ€. μ¬λ¬λͺ μ μνμμ λ€μ€ μ°λ λμ νκ²½μ λ§νλ κ²μΈμ§, λ¨μν μ¬λ¬κ°μ μνμ μΈμ€ν΄μ€κ° μ‘΄μ¬ν΄μΌ νλ κ²μΈμ§μ λν΄μ κ³ λ―Όνκ² λμκ³ , μ΄λ₯Ό ν΄κ²°νμ§ λͺ»νμ± κ΅¬νμ νλ €κ³ νλ μ΄λ €μμ κ²ͺμ κ² κ°λ€. κ·Έλμ λ Όμλ₯Ό νμ¬μ μΈμ€ν΄μ€λ₯Ό μμ±νλ λ°©ν₯μ΄ μλ, λ€μ€ μ°λ λμ λ°©ν₯μΌλ‘ ꡬνμ ν μ μλ λΆλΆμ΄ μμ κ² κ°λ€λ κ²°λ‘ μ ν΅ν΄μ λ€μ€ μ°λ λμ νκ²½μΌλ‘ ꡬννκΈ°λ‘ νμλ€. - λν, λ€μ€ μ°λ λμ κ΄μ μμ λ°μ΄ν°λ₯Ό μ²λ¦¬νκΈ° μν΄μ μνμμ΄ κ·Όλ¬΄νλ μκ° λμμλ λ€λ₯Έ μΌμ ν μ μλ κ²μ ꡬννκΈ° μν΄μ λκΈ°μ μΌλ‘ μ½λλ₯Ό μμ±νλ €κ³ νμλ€.
- νλμ μ
무λ₯Ό μ²λ¦¬νλλ° κ±Έλ¦¬λ μκ°μ 0.7μ΄λΌλ μꡬμ¬νμ΄ μμκ³ , μ΄λ₯Ό ν΄κ²°νκΈ° μν΄μ
asyncAfter
λ©μλλ₯Ό νμ©νλ €κ³ νμλ€. νμ§λ§, λΉλκΈ°μ μΌλ‘ μ²λ¦¬νλ κ²μ΄ μλκΈ° λλ¬Έμsleep
λ©μλλ₯Ό νμ©νμ¬μ μ 무 μκ°μ κΈ°λ€λ¦΄ μ μλλ‘ νμλ€.
μνμμ μν μ λν κ³ λ―Ό λ° λ¬Έμ
-
μ²μ μκ°νλ μλ (κ·Έλ¦Ό 1)
-
Operationμ ν΅ν΄ ꡬν μμ± (κ·Έλ¦Ό 2)
-
μνμμ΄ ν μ μλ μΌμ μμμ μ΄λκΉμ§μΈκ°μ λν΄μ κ³ λ―Όνκ² λμμ΅λλ€. μνμμ΄ νμ¬ λμΆ μ°½κ΅¬μμ μΌμ νκ³ μμ§λ§, λ€λ₯Έ μ 무λ₯Ό νμ§ λͺ»νλ κ²μ μλλΌκ³ μκ°νμμ΅λλ€. μ¦, μνμμ μ΄λ€ μλμ΄ μλ μ 무λ₯Ό λ³Ό μ μμ΄μΌ νλ κ²μ λλ€.
-
Threadλ₯Ό μνμμ΄λΌκ³ μκ°νλ€λ©΄, νκ°μ Threadκ° νλͺ μ μνμμ΄κΈ° λλ¬Έμ κ΄λ¦¬κ° λμ± μ¬μΈ κ²μ΄λΌκ³ μκ°νμμ΅λλ€. κ·Έλμ
κ·Έλ¦Ό 1
μ²λΌ νκ°μ κΈλ‘λ² νμμ μ¬λ¬κ°μ μ°λ λλ‘ μΌμ νλ κ²μ λν΄μ κ³ λ―Όνκ³ κ΅¬νμ μλνμμ΅λλ€. -
νμ§λ§, μν μ 체μ λκΈ°μ΄μμλ λΉλκΈ°μ μΌλ‘ μΌμ μνμμΌμΌ νλ λ¬Έμ κ° λ°μνμκ³ , κ°κ°μ μ°λ λμ μΌμ λκΈ°μ μΌλ‘ μ΄λ£¨μ΄μ ΈμΌ νκΈ° λλ¬Έμ λμΌν νμμ μΌμ μ§ννλ κ²μ μ μ νμ§ μλ€κ³ μκ°νμμ΅λλ€. κ·Έλμ
κ·Έλ¦Ό 2
μ κ°μ΄ λκ°μ νλ‘ κ΅¬μ±νκ³ , κ° νμ λ°λΌμ λμμ μνν μ μλ μΌμ κ°μλ₯Ό μ‘°μ μμ¬μ ꡬνν μ μλλ‘ νμμ΅λλ€. -
μμ κ°μ΄ ꡬννλ κ³Όμ μμ DispatchQueueλ λ΄λΆ μμ μ λν μ°λ λλ₯Ό μ§μ μ μΌλ‘ μ ννλ λ©μλλ νλ‘νΌν°κ° μ‘΄μ¬νμ§ μκΈ° λλ¬Έμ Operation νμ κ³Ό OperationQueueλ₯Ό νμ©νμ¬μ ꡬννμμ΅λλ€.
κ°λ‘ μ€ν¬λ‘€
λ¬Έμ μν© | ν΄κ²° νλ©΄ |
---|---|
-
UIλ₯Ό ꡬμ±νλ μ€, λμΌν ν΄λμ€λ‘ μ μλ μ€ν¬λ‘€ λ·° 2κ°λ₯Ό λλν λ°°μΉ νλ €κ³ νμλ€. νμ§λ§, κ° κΈ°κΈ°μ safeAreaμ ν¬κΈ°κ° λ€λ₯Έ μ΄μ λ‘ μΈν΄μ μΌμͺ½μ μ ννκ² μΈλ‘λ‘λ§ μ€ν¬λ‘€μ΄ λμ§λ§, μ€λ₯Έμͺ½μ μ¬λ°©μΌλ‘ μ€ν¬λ‘€μ΄ κ°λ₯ν μν©μ΄ λ°μνμλ€.
-
μ΄λ μ€ν¬λ‘€ λ·°μ ContentViewμ κ°λ‘ κΈΈμ΄κ° frameLayoutGuideμ κ°λ‘ κΈΈμ΄μ λμΌνκ²νμ¬ κ°λ‘ μ€ν¬λ‘€μ λ°©μ§ν μ μμμ§λ§, AutoLayout μ μ½ μ¬νμ ꡬμ±νλ κ³Όμ μμ CenterXμ μ μ½μ¬νμΌλ‘ μΈν΄μ λ°μνκ² λμλ€.
-
μ΄λ₯Ό ν΄κ²°νκΈ° μν΄ λ€μν λ°©λ²μ μ°Ύκ² λμλ€.
- ScrollViewμ bounces νλ‘νΌν°λ₯Ό falseλ‘ λ³κ²½νμ¬μ νλ©΄ μ΄μΈμ μμμΌλ‘ μ€ν¬λ‘€ λλ κ²μ λ§λλ²
- UIScrollViewDelegateλ₯Ό μ±ν νμ¬μ scrollViewDidScroll() ν¨μλ₯Ό μ μν΄μ£Όλ λ²
-
μ°λ¦¬λ μ΄μ λν΄μ 2λ²μ§Έ λ°©λ²μ νμ©νμ¬μ ScrollViewμ ContentOffset.xμ κ°μ΄ λ³κ²½λλ κ²μ λ€μ 0μΌλ‘ λ³κ²½νμ¬μ κ°λ‘ μ€ν¬λ‘€μ΄ λμ§ μλλ‘ νμλ€.
class CustomerLineScrollView: UIScrollView, UIScrollViewDelegate { ... func scrollViewDidScroll(_ scrollView: UIScrollView) { if scrollView.contentOffset.x != 0 { scrollView.contentOffset.x = 0 } } }
- Linked-List νμ μΌλ‘ Queue νμ ꡬν
- Generics νμ μ μ΄ν΄
- mutating ν€μλμ λν μ΄ν΄
- λκΈ°μ λΉλκΈ°μ λν μ΄ν΄
- μ€λ λ κ°λ μ λν μ΄ν΄
- λμμ± νλ‘κ·Έλλ°μ μ΄ν΄μ νμ©
- GCDμ μ΄ν΄ λ° κ΅¬ν
- RaceConditionμ ν΄κ²°νλ λ°©λ²
- Operationμ μ΄ν΄ λ° κ΅¬ν
- UIAppμμμ λμμ± νλ‘κ·Έλλ° μ μ©
- NotificationCenterμ μ΄ν΄ λ° νμ©
- Protocol Orientied Programmingμ λν μ΄ν΄ λ° νμ©
- 컀μ€ν λ·° ꡬν
μΌκ³°λ·λ· - λμμ± νλ‘κ·Έλλ° μΌκ³°λ·λ· - μ€ν λ μ΄μμ μ 볡νκΈ° Concurrent Programming With GCD in Swift 3 Swift Language Guide - Subscripts Concurrency Programming Guide Swift Language Guide - Concurrency