From e7669dfdf3d3780cbdb2ab15aadcf4eb2f951aff Mon Sep 17 00:00:00 2001 From: lina0322 Date: Sat, 9 Jan 2021 17:10:10 +0900 Subject: [PATCH 01/17] =?UTF-8?q?Feat:=20HeadOffice=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../project.pbxproj | 4 ++++ .../BankManagerConsoleApp/HeadOffice.swift | 21 +++++++++++++++++++ 2 files changed, 25 insertions(+) create mode 100644 BankManagerConsoleApp/BankManagerConsoleApp/HeadOffice.swift diff --git a/BankManagerConsoleApp/BankManagerConsoleApp.xcodeproj/project.pbxproj b/BankManagerConsoleApp/BankManagerConsoleApp.xcodeproj/project.pbxproj index 70a54622e..9fb8b9263 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp.xcodeproj/project.pbxproj +++ b/BankManagerConsoleApp/BankManagerConsoleApp.xcodeproj/project.pbxproj @@ -7,6 +7,7 @@ objects = { /* Begin PBXBuildFile section */ + 4CB8E9BB25A998E300C021F6 /* HeadOffice.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CB8E9BA25A998E300C021F6 /* HeadOffice.swift */; }; 4CDDB11825A422B700EDC9CE /* Teller.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CDDB11725A422B700EDC9CE /* Teller.swift */; }; 4CDDB11B25A422CD00EDC9CE /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CDDB11A25A422CD00EDC9CE /* Client.swift */; }; 4CDDB11E25A422EF00EDC9CE /* Enum.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CDDB11D25A422EF00EDC9CE /* Enum.swift */; }; @@ -27,6 +28,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 4CB8E9BA25A998E300C021F6 /* HeadOffice.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HeadOffice.swift; sourceTree = ""; }; 4CDDB11725A422B700EDC9CE /* Teller.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Teller.swift; sourceTree = ""; }; 4CDDB11A25A422CD00EDC9CE /* Client.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Client.swift; sourceTree = ""; }; 4CDDB11D25A422EF00EDC9CE /* Enum.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Enum.swift; sourceTree = ""; }; @@ -65,6 +67,7 @@ C7694E78259C3EC00053667F /* BankManagerConsoleApp */ = { isa = PBXGroup; children = ( + 4CB8E9BA25A998E300C021F6 /* HeadOffice.swift */, C7D65D1A259C8190005510E0 /* Bank.swift */, 4CDDB11725A422B700EDC9CE /* Teller.swift */, 4CDDB11A25A422CD00EDC9CE /* Client.swift */, @@ -132,6 +135,7 @@ buildActionMask = 2147483647; files = ( C7694E7A259C3EC00053667F /* main.swift in Sources */, + 4CB8E9BB25A998E300C021F6 /* HeadOffice.swift in Sources */, C7D65D1B259C8190005510E0 /* Bank.swift in Sources */, 4CDDB11E25A422EF00EDC9CE /* Enum.swift in Sources */, 4CDDB11B25A422CD00EDC9CE /* Client.swift in Sources */, diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/HeadOffice.swift b/BankManagerConsoleApp/BankManagerConsoleApp/HeadOffice.swift new file mode 100644 index 000000000..03fa69c4f --- /dev/null +++ b/BankManagerConsoleApp/BankManagerConsoleApp/HeadOffice.swift @@ -0,0 +1,21 @@ +// +// HeadOffice.swift +// BankManagerConsoleApp +// +// Created by 임리나 on 2021/01/09. +// + +import Foundation + +class HeadOffice { + static let shared = HeadOffice() + var loanQueue: DispatchQueue + + private init() {} + + func judgeLoan() { + loanQueue.async { + <#code#> + } + } +} From dfc7c4dfa3f9e996617159c82bf48e5f0644f368 Mon Sep 17 00:00:00 2001 From: lina0322 Date: Sat, 9 Jan 2021 17:48:11 +0900 Subject: [PATCH 02/17] Remove: Teller.workingHours --- BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift | 2 -- 1 file changed, 2 deletions(-) diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift index 7fc70712e..4dd014a10 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift @@ -10,7 +10,6 @@ import Foundation final class Teller { private var windowNumber: Int var workingQueue: DispatchQueue - var workingHours: TimeInterval = 0 private var isWorking: Bool = false var isNotWorking: Bool { return !isWorking @@ -27,7 +26,6 @@ final class Teller { isWorking = true Dashboard.printStatus(for: client, about: .tellerStart) Thread.sleep(forTimeInterval: needTimeToWork) - workingHours += needTimeToWork Dashboard.printStatus(for: client, about: .tellerFinish) isWorking = false } From dd1f8f197f526acea00578b87a5fc57553490f27 Mon Sep 17 00:00:00 2001 From: lina0322 Date: Sat, 9 Jan 2021 18:18:11 +0900 Subject: [PATCH 03/17] =?UTF-8?q?Feat:=20=EB=8C=80=EC=B6=9C=EC=8B=AC?= =?UTF-8?q?=EC=82=AC=20queue=EA=B5=AC=ED=98=84=20=EB=B0=8F=20=EC=8B=9C?= =?UTF-8?q?=EA=B0=84=20=ED=99=95=EC=9D=B8=EC=9D=84=20=EC=9C=84=ED=95=B4,?= =?UTF-8?q?=20=EC=8B=9C=EA=B0=84=20=EC=B6=9C=EB=A0=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BankManagerConsoleApp/Dashboard.swift | 6 +++- .../BankManagerConsoleApp/Enum.swift | 4 ++- .../BankManagerConsoleApp/HeadOffice.swift | 19 ++++++------ .../BankManagerConsoleApp/Teller.swift | 31 +++++++++++++++++-- 4 files changed, 46 insertions(+), 14 deletions(-) diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Dashboard.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Dashboard.swift index 8c356cf41..464615671 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Dashboard.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Dashboard.swift @@ -10,7 +10,11 @@ import Foundation class Dashboard { static func printStatus(for client: Client, about message: Message) { let message = String(format: message.rawValue, client.waitingNumber, client.priority.description, client.businessType.description) - print(message) + let format = DateFormatter() + format.dateFormat = "ss.S" + let now = Date() + let date = format.string(from: now) + print(message + " \(date)") } static func printCloseMessage(_ number: Int, _ time: TimeInterval?) { diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift index 7f90efabd..cb717ae66 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift @@ -22,6 +22,8 @@ enum Message: String { case close = "업무가 마감되었습니다. 오늘 업무를 처리한 고객은 총 %d명이며, 총 업무시간은 %.2f초입니다." case tellerStart = "%d번 %@고객 %@업무 시작" case tellerFinish = "%d번 %@고객 %@업무 완료" + case loanStart = "%d번 %@고객 %@심사 시작" + case loanFinish = "%d번 %@고객 %@심사 완료" } enum BusinessType: Int, CaseIterable { @@ -33,7 +35,7 @@ enum BusinessType: Int, CaseIterable { case .deposit: return 0.7 case .loan: - return 1.1 + return 0.3 } } diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/HeadOffice.swift b/BankManagerConsoleApp/BankManagerConsoleApp/HeadOffice.swift index 68a5a4562..6f2b6adaa 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/HeadOffice.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/HeadOffice.swift @@ -8,14 +8,15 @@ import Foundation class HeadOffice { -// static let shared = HeadOffice() -// var loanQueue: DispatchQueue -// -// private init() {} + static let shared = HeadOffice() + var loanQueue: DispatchQueue = DispatchQueue(label: "HeadOffice") + let needTimeToJudgeLoan: TimeInterval = 0.5 -// func judgeLoan() { -// loanQueue.async { -// <#code#> -// } -// } + private init() {} + + func judgeLoan(for client: Client) { + Dashboard.printStatus(for: client, about: .loanStart) + Thread.sleep(forTimeInterval: self.needTimeToJudgeLoan) + Dashboard.printStatus(for: client, about: .loanFinish) + } } diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift index 4dd014a10..8151b9288 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift @@ -21,12 +21,37 @@ final class Teller { } func handleBusiness(for client: Client) { - let needTimeToWork = client.businessType.neededTime - isWorking = true + switch client.businessType { + case .deposit: + handleDeposit(for: client) + case .loan: + handleLoan(for: client) + } + isWorking = false + } + + func handleDeposit(for client: Client) { + let needTimeToWork = client.businessType.neededTime + Dashboard.printStatus(for: client, about: .tellerStart) Thread.sleep(forTimeInterval: needTimeToWork) Dashboard.printStatus(for: client, about: .tellerFinish) - isWorking = false + } + + + func handleLoan(for client: Client) { + let semaphore = DispatchSemaphore(value: 0) + let needTimeToWork = client.businessType.neededTime + + Dashboard.printStatus(for: client, about: .tellerStart) + Thread.sleep(forTimeInterval: needTimeToWork) + HeadOffice.shared.loanQueue.async { + HeadOffice.shared.judgeLoan(for: client) + semaphore.signal() + } + semaphore.wait() + Thread.sleep(forTimeInterval: needTimeToWork) + Dashboard.printStatus(for: client, about: .tellerFinish) } } From 50568c6cca57872d6e8e5f2c9063ea7b5f43cd72 Mon Sep 17 00:00:00 2001 From: lina0322 Date: Sat, 9 Jan 2021 19:33:34 +0900 Subject: [PATCH 04/17] =?UTF-8?q?Refactor:=20priority=EC=99=80=20businessT?= =?UTF-8?q?ype=20=EB=9E=9C=EB=8D=A4=20=EB=B0=A9=EC=8B=9D=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BankManagerConsoleApp/BankManagerConsoleApp/Client.swift | 2 +- BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift | 2 +- BankManagerConsoleApp/BankManagerConsoleApp/main.swift | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Client.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Client.swift index 7de8eba15..2aacf6467 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Client.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Client.swift @@ -9,7 +9,7 @@ import Foundation final class Client { enum Priority: Int, CaseIterable { - case first = 0 + case first case second case third diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift index cb717ae66..8e58eaf58 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift @@ -27,7 +27,7 @@ enum Message: String { } enum BusinessType: Int, CaseIterable { - case deposit = 0 + case deposit case loan var neededTime: TimeInterval { diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/main.swift b/BankManagerConsoleApp/BankManagerConsoleApp/main.swift index 76575bfcd..09496f1e3 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/main.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/main.swift @@ -14,7 +14,7 @@ private func initClients(_ number: Int) -> [Client]? { var clients: [Client] = [] for waitingNumber in 1...number { - guard let businessType = BusinessType(rawValue: randomNumber(to: BusinessType.allCases.count - 1)), let priority = Client.Priority(rawValue: randomNumber(to: Client.Priority.allCases.count - 1)) else { + guard let businessType = BusinessType.allCases.randomElement(), let priority = Client.Priority.allCases.randomElement() else { return nil } From 45f521bb39a826e14c51cda486a41891fccf8da3 Mon Sep 17 00:00:00 2001 From: lina0322 Date: Sat, 9 Jan 2021 20:02:03 +0900 Subject: [PATCH 05/17] =?UTF-8?q?Remove:=20sortClientByPriority=ED=95=98?= =?UTF-8?q?=EA=B3=A0,=20Clients=20=EC=A0=95=EB=A0=AC=20=EB=B0=A9=EC=8B=9D?= =?UTF-8?q?=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../project.pbxproj | 4 +++ .../BankManagerConsoleApp/Client.swift | 14 +++++----- .../BankManagerConsoleApp/Dashboard.swift | 6 ++++- .../BankManagerConsoleApp/Enum.swift | 6 +++-- .../BankManagerConsoleApp/HeadOffice.swift | 22 ++++++++++++++++ .../BankManagerConsoleApp/Teller.swift | 26 ++++++++++++++++++- 6 files changed, 67 insertions(+), 11 deletions(-) create mode 100644 BankManagerConsoleApp/BankManagerConsoleApp/HeadOffice.swift diff --git a/BankManagerConsoleApp/BankManagerConsoleApp.xcodeproj/project.pbxproj b/BankManagerConsoleApp/BankManagerConsoleApp.xcodeproj/project.pbxproj index 0eb09925f..ccc8851e2 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp.xcodeproj/project.pbxproj +++ b/BankManagerConsoleApp/BankManagerConsoleApp.xcodeproj/project.pbxproj @@ -7,6 +7,7 @@ objects = { /* Begin PBXBuildFile section */ + 4CB8E9BB25A998E300C021F6 /* HeadOffice.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CB8E9BA25A998E300C021F6 /* HeadOffice.swift */; }; 4CB8E9C425A99CE000C021F6 /* Dashboard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CB8E9C325A99CE000C021F6 /* Dashboard.swift */; }; 4CDDB11825A422B700EDC9CE /* Teller.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CDDB11725A422B700EDC9CE /* Teller.swift */; }; 4CDDB11B25A422CD00EDC9CE /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CDDB11A25A422CD00EDC9CE /* Client.swift */; }; @@ -28,6 +29,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 4CB8E9BA25A998E300C021F6 /* HeadOffice.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HeadOffice.swift; sourceTree = ""; }; 4CB8E9C325A99CE000C021F6 /* Dashboard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Dashboard.swift; sourceTree = ""; }; 4CDDB11725A422B700EDC9CE /* Teller.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Teller.swift; sourceTree = ""; }; 4CDDB11A25A422CD00EDC9CE /* Client.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Client.swift; sourceTree = ""; }; @@ -67,6 +69,7 @@ C7694E78259C3EC00053667F /* BankManagerConsoleApp */ = { isa = PBXGroup; children = ( + 4CB8E9BA25A998E300C021F6 /* HeadOffice.swift */, 4CB8E9C325A99CE000C021F6 /* Dashboard.swift */, C7D65D1A259C8190005510E0 /* Bank.swift */, 4CDDB11725A422B700EDC9CE /* Teller.swift */, @@ -135,6 +138,7 @@ buildActionMask = 2147483647; files = ( C7694E7A259C3EC00053667F /* main.swift in Sources */, + 4CB8E9BB25A998E300C021F6 /* HeadOffice.swift in Sources */, C7D65D1B259C8190005510E0 /* Bank.swift in Sources */, 4CDDB11E25A422EF00EDC9CE /* Enum.swift in Sources */, 4CDDB11B25A422CD00EDC9CE /* Client.swift in Sources */, diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Client.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Client.swift index 837d02947..5ba0411c6 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Client.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Client.swift @@ -9,17 +9,17 @@ import Foundation final class Client { enum Priority: Comparable, CaseIterable { - case first - case second - case third + case VVIP + case VIP + case normal var description: String { switch self { - case .first: + case .VVIP: return "VVIP" - case .second: + case .VIP: return "VIP" - case .third: + case .normal: return "일반" } } @@ -29,7 +29,7 @@ final class Client { let businessType: BusinessType let priority: Priority - init(waitingNumber: Int, businessType: BusinessType = .deposit, priority: Priority = .third) { + init(waitingNumber: Int, businessType: BusinessType = .deposit, priority: Priority = .normal) { self.waitingNumber = waitingNumber self.businessType = businessType self.priority = priority diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Dashboard.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Dashboard.swift index 548f840df..df96eda0e 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Dashboard.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Dashboard.swift @@ -14,7 +14,11 @@ class Dashboard { static func printStatus(for client: Client, about message: Message) { let message = String(format: message.rawValue, client.waitingNumber, client.priority.description, client.businessType.description) - print(message) + let format = DateFormatter() + format.dateFormat = "ss.S" + let now = Date() + let date = format.string(from: now) + print(message + " \(date)") } static func printCloseMessage(_ number: Int, _ time: TimeInterval?) { diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift index e931d75e0..15535b108 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift @@ -22,9 +22,11 @@ enum Message: String { case close = "업무가 마감되었습니다. 오늘 업무를 처리한 고객은 총 %d명이며, 총 업무시간은 %.2f초입니다." case tellerStart = "%d번 %@고객 %@업무 시작" case tellerFinish = "%d번 %@고객 %@업무 완료" + case loanStart = "%d번 %@고객 %@심사 시작" + case loanFinish = "%d번 %@고객 %@심사 완료" } -enum BusinessType: Int, CaseIterable { +enum BusinessType: CaseIterable { case deposit case loan @@ -33,7 +35,7 @@ enum BusinessType: Int, CaseIterable { case .deposit: return 0.7 case .loan: - return 1.1 + return 0.3 } } diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/HeadOffice.swift b/BankManagerConsoleApp/BankManagerConsoleApp/HeadOffice.swift new file mode 100644 index 000000000..6f2b6adaa --- /dev/null +++ b/BankManagerConsoleApp/BankManagerConsoleApp/HeadOffice.swift @@ -0,0 +1,22 @@ +// +// HeadOffice.swift +// BankManagerConsoleApp +// +// Created by 임리나 on 2021/01/09. +// + +import Foundation + +class HeadOffice { + static let shared = HeadOffice() + var loanQueue: DispatchQueue = DispatchQueue(label: "HeadOffice") + let needTimeToJudgeLoan: TimeInterval = 0.5 + + private init() {} + + func judgeLoan(for client: Client) { + Dashboard.printStatus(for: client, about: .loanStart) + Thread.sleep(forTimeInterval: self.needTimeToJudgeLoan) + Dashboard.printStatus(for: client, about: .loanFinish) + } +} diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift index fd12ffc21..13b64a1a1 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift @@ -22,9 +22,33 @@ final class Teller { func handleBusiness(for client: Client) { isWorking = true + switch client.businessType { + case .deposit: + handleDeposit(for: client) + case .loan: + handleLoan(for: client) + } + isWorking = false + } + + func handleDeposit(for client: Client) { Dashboard.printStatus(for: client, about: .tellerStart) Thread.sleep(forTimeInterval: client.businessType.neededTime) Dashboard.printStatus(for: client, about: .tellerFinish) - isWorking = false + } + + + func handleLoan(for client: Client) { + let semaphore = DispatchSemaphore(value: 0) + + Dashboard.printStatus(for: client, about: .tellerStart) + Thread.sleep(forTimeInterval: client.businessType.neededTime) + HeadOffice.shared.loanQueue.async { + HeadOffice.shared.judgeLoan(for: client) + semaphore.signal() + } + semaphore.wait() + Thread.sleep(forTimeInterval: client.businessType.neededTime) + Dashboard.printStatus(for: client, about: .tellerFinish) } } From 032fca25787e52ea6e3af69a73d5af0f0be0e6d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=A6=AC=EB=82=98?= Date: Mon, 11 Jan 2021 22:15:35 +0900 Subject: [PATCH 06/17] =?UTF-8?q?Refactor:=20main=EC=9D=98=20private=20?= =?UTF-8?q?=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BankManagerConsoleApp/BankManagerConsoleApp/main.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/main.swift b/BankManagerConsoleApp/BankManagerConsoleApp/main.swift index 4b2d77895..80b19f5e0 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/main.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/main.swift @@ -6,7 +6,7 @@ import Foundation -private func main() { +func main() { let bank = Bank() let tellerNumber = 3 let maxClientNumber = 30 From 67e050a384573fe91cffb15742076d9fb766af14 Mon Sep 17 00:00:00 2001 From: lina0322 Date: Tue, 12 Jan 2021 11:34:32 +0900 Subject: [PATCH 07/17] =?UTF-8?q?Refactor:=20=EC=A0=91=EA=B7=BC=EC=A0=9C?= =?UTF-8?q?=ED=95=9C=EC=9E=90=20=EC=88=98=EC=A0=95,=20=ED=95=84=EC=9A=94?= =?UTF-8?q?=EC=97=86=EB=8A=94=20self=EC=A0=9C=EA=B1=B0,=20=EB=B3=B5?= =?UTF-8?q?=EC=9E=A1=ED=95=9C=20=EA=B5=AC=EB=AC=B8=20=EC=88=98=EC=A0=95=20?= =?UTF-8?q?=EB=93=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Bank.swift | 6 +++--- BankManagerConsoleApp/BankManagerConsoleApp/Client.swift | 3 ++- BankManagerConsoleApp/BankManagerConsoleApp/Dashboard.swift | 6 +----- .../BankManagerConsoleApp/HeadOffice.swift | 6 +++--- BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift | 2 +- BankManagerConsoleApp/BankManagerConsoleApp/main.swift | 2 +- 6 files changed, 11 insertions(+), 14 deletions(-) diff --git a/Bank.swift b/Bank.swift index 5bd46a8da..7d7ca4e1f 100644 --- a/Bank.swift +++ b/Bank.swift @@ -34,15 +34,15 @@ final class Bank { var isContinue = true while isContinue { - for teller in self.tellers { - if self.clients.count == 0 { + for teller in tellers { + if clients.count == 0 { isContinue = false break } if teller.isNotWorking { let client = clients.removeFirst() teller.handleBusiness(for: client, withDispatchGroup: dispatchGroup) - self.finishedClientCount += 1 + finishedClientCount += 1 } } } diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Client.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Client.swift index 19020ec62..823c2150e 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Client.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Client.swift @@ -15,7 +15,8 @@ struct Clients { guard let businessType = BusinessType.allCases.randomElement(), let priority = Client.Priority.allCases.randomElement() else { return } - list.append(Client(waitingNumber: waitingNumber, businessType: businessType, priority: priority)) + let clinet = Client(waitingNumber: waitingNumber, businessType: businessType, priority: priority) + list.append(clinet) } } } diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Dashboard.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Dashboard.swift index 88abfde4f..694b5f503 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Dashboard.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Dashboard.swift @@ -14,11 +14,7 @@ struct Dashboard { static func printStatus(for client: Client, about message: String) { let message = String(format: message, client.waitingNumber, "\(client.priority)", "\(client.businessType)") - let format = DateFormatter() - format.dateFormat = "ss.S" - let now = Date() - let date = format.string(from: now) - print(message + " \(date)") + print(message) } static func printCloseMessage(_ count: Int, _ time: TimeInterval?) { diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/HeadOffice.swift b/BankManagerConsoleApp/BankManagerConsoleApp/HeadOffice.swift index a2e082d0c..8b0ffea7a 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/HeadOffice.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/HeadOffice.swift @@ -7,16 +7,16 @@ import Foundation -class HeadOffice { +final class HeadOffice { static let shared = HeadOffice() + private let neededTimeToJudgeLoan: TimeInterval = 0.5 var loanQueue: DispatchQueue = DispatchQueue(label: "HeadOffice") - let needTimeToJudgeLoan: TimeInterval = 0.5 private init() {} func judgeLoan(for client: Client) { Dashboard.printStatus(for: client, about: Message.loanStart) - Thread.sleep(forTimeInterval: self.needTimeToJudgeLoan) + Thread.sleep(forTimeInterval: self.neededTimeToJudgeLoan) Dashboard.printStatus(for: client, about: Message.loanFinish) } } diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift index 775d71731..d8ca0ff02 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift @@ -30,8 +30,8 @@ final class Teller { case .loan: self.handleLoan(for: client) } + self.isWorking = false } - isWorking = false } func handleDeposit(for client: Client) { diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/main.swift b/BankManagerConsoleApp/BankManagerConsoleApp/main.swift index 16258eaed..f53f0fef7 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/main.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/main.swift @@ -24,7 +24,7 @@ func main() { switch command { case .start: let randomNumber = Int.random(in: minClientCount...maxClientCount) - let clients = Clients.init(count: randomNumber) + let clients = Clients(count: randomNumber) bank.operateBank(teller: tellerCount, client: clients.list) case .end: isContinue = false From 5ec44dff2f163c53ec8103a84b408f9e06e9485d Mon Sep 17 00:00:00 2001 From: lina0322 Date: Tue, 12 Jan 2021 11:53:37 +0900 Subject: [PATCH 08/17] =?UTF-8?q?Style:=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20=EA=B3=B5=EB=B0=B1=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Bank.swift | 2 +- BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Bank.swift b/Bank.swift index 7d7ca4e1f..19458799a 100644 --- a/Bank.swift +++ b/Bank.swift @@ -11,7 +11,7 @@ final class Bank { private var tellers: [Teller] = [] private var finishedClientCount = 0 private var businessTime: TimeInterval? - + func operateBank(teller: Int, client: [Client]) { let openTime = Date() diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift index d8ca0ff02..67fd55adb 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift @@ -14,7 +14,7 @@ final class Teller { var isNotWorking: Bool { return !isWorking } - + init(windowNumber: Int) { self.windowNumber = windowNumber workingQueue = DispatchQueue(label: "\(windowNumber)") From 3fda98ba41abcc4a2eef74bca5daef4aeb37944d Mon Sep 17 00:00:00 2001 From: lina0322 Date: Tue, 12 Jan 2021 11:54:45 +0900 Subject: [PATCH 09/17] =?UTF-8?q?Style:=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20=EA=B3=B5=EB=B0=B1=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift index 67fd55adb..9467f0ca5 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift @@ -14,7 +14,7 @@ final class Teller { var isNotWorking: Bool { return !isWorking } - + init(windowNumber: Int) { self.windowNumber = windowNumber workingQueue = DispatchQueue(label: "\(windowNumber)") @@ -22,7 +22,7 @@ final class Teller { func handleBusiness(for client: Client, withDispatchGroup group: DispatchGroup) { isWorking = true - + workingQueue.async(group: group) { switch client.businessType { case .deposit: From b8a57aa6ef7193e9d8fe3b24f47ac2425e67c25f Mon Sep 17 00:00:00 2001 From: lina0322 Date: Tue, 12 Jan 2021 13:27:28 +0900 Subject: [PATCH 10/17] =?UTF-8?q?Refactor:=20queue=EB=A5=BC=20let=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EC=84=A0=EC=96=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BankManagerConsoleApp/BankManagerConsoleApp/HeadOffice.swift | 2 +- BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/HeadOffice.swift b/BankManagerConsoleApp/BankManagerConsoleApp/HeadOffice.swift index 8b0ffea7a..33a801d68 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/HeadOffice.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/HeadOffice.swift @@ -10,7 +10,7 @@ import Foundation final class HeadOffice { static let shared = HeadOffice() private let neededTimeToJudgeLoan: TimeInterval = 0.5 - var loanQueue: DispatchQueue = DispatchQueue(label: "HeadOffice") + let loanQueue: DispatchQueue = DispatchQueue(label: "HeadOffice") private init() {} diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift index 9467f0ca5..d0b95a35a 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift @@ -9,7 +9,7 @@ import Foundation final class Teller { private var windowNumber: Int - var workingQueue: DispatchQueue + let workingQueue: DispatchQueue private var isWorking: Bool = false var isNotWorking: Bool { return !isWorking From 2839647f2eb38183a17857cbefb6536bc2f0ceaf Mon Sep 17 00:00:00 2001 From: lina0322 Date: Tue, 12 Jan 2021 21:34:23 +0900 Subject: [PATCH 11/17] =?UTF-8?q?Refactor:=20BankError=20->=20StringFormat?= =?UTF-8?q?tingError=EC=9C=BC=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BankManagerConsoleApp/BankManagerConsoleApp/Dashboard.swift | 2 +- BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift | 2 +- BankManagerConsoleApp/BankManagerConsoleApp/main.swift | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Dashboard.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Dashboard.swift index 694b5f503..307aa2ae1 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Dashboard.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Dashboard.swift @@ -19,7 +19,7 @@ struct Dashboard { static func printCloseMessage(_ count: Int, _ time: TimeInterval?) { guard let time = time else { - print("\(BankError.unknown)") + print("\(StringFormattingError.unknown)") return } let message = String(format: Message.close, count, time) diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift index 0d8d49ee2..9af260bb6 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift @@ -49,7 +49,7 @@ enum BusinessType: CaseIterable, CustomStringConvertible { } } -enum BankError: Error, CustomStringConvertible { +enum StringFormattingError: Error, CustomStringConvertible { case wrongInput case unknown diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/main.swift b/BankManagerConsoleApp/BankManagerConsoleApp/main.swift index f53f0fef7..e10b7fc71 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/main.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/main.swift @@ -17,7 +17,7 @@ func main() { Dashboard.printMenu() guard let input = readLine(), let command = Menu(rawValue: input) else { - print("\(BankError.wrongInput)") + print("\(StringFormattingError.wrongInput)") continue } From 37bce730e5d620bb85d5992f24ad87c2111411aa Mon Sep 17 00:00:00 2001 From: lina0322 Date: Tue, 12 Jan 2021 23:19:10 +0900 Subject: [PATCH 12/17] =?UTF-8?q?Add:=20Clients=20=ED=8C=8C=EC=9D=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../project.pbxproj | 4 ++++ .../BankManagerConsoleApp/Client.swift | 14 ------------ .../BankManagerConsoleApp/Clients.swift | 22 +++++++++++++++++++ 3 files changed, 26 insertions(+), 14 deletions(-) create mode 100644 BankManagerConsoleApp/BankManagerConsoleApp/Clients.swift diff --git a/BankManagerConsoleApp/BankManagerConsoleApp.xcodeproj/project.pbxproj b/BankManagerConsoleApp/BankManagerConsoleApp.xcodeproj/project.pbxproj index ccc8851e2..7fb35fad8 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp.xcodeproj/project.pbxproj +++ b/BankManagerConsoleApp/BankManagerConsoleApp.xcodeproj/project.pbxproj @@ -7,6 +7,7 @@ objects = { /* Begin PBXBuildFile section */ + 4C4D3B9325ADE7320070DB26 /* Clients.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C4D3B9225ADE7320070DB26 /* Clients.swift */; }; 4CB8E9BB25A998E300C021F6 /* HeadOffice.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CB8E9BA25A998E300C021F6 /* HeadOffice.swift */; }; 4CB8E9C425A99CE000C021F6 /* Dashboard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CB8E9C325A99CE000C021F6 /* Dashboard.swift */; }; 4CDDB11825A422B700EDC9CE /* Teller.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CDDB11725A422B700EDC9CE /* Teller.swift */; }; @@ -29,6 +30,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 4C4D3B9225ADE7320070DB26 /* Clients.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Clients.swift; sourceTree = ""; }; 4CB8E9BA25A998E300C021F6 /* HeadOffice.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HeadOffice.swift; sourceTree = ""; }; 4CB8E9C325A99CE000C021F6 /* Dashboard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Dashboard.swift; sourceTree = ""; }; 4CDDB11725A422B700EDC9CE /* Teller.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Teller.swift; sourceTree = ""; }; @@ -74,6 +76,7 @@ C7D65D1A259C8190005510E0 /* Bank.swift */, 4CDDB11725A422B700EDC9CE /* Teller.swift */, 4CDDB11A25A422CD00EDC9CE /* Client.swift */, + 4C4D3B9225ADE7320070DB26 /* Clients.swift */, 4CDDB11D25A422EF00EDC9CE /* Enum.swift */, C7694E79259C3EC00053667F /* main.swift */, ); @@ -139,6 +142,7 @@ files = ( C7694E7A259C3EC00053667F /* main.swift in Sources */, 4CB8E9BB25A998E300C021F6 /* HeadOffice.swift in Sources */, + 4C4D3B9325ADE7320070DB26 /* Clients.swift in Sources */, C7D65D1B259C8190005510E0 /* Bank.swift in Sources */, 4CDDB11E25A422EF00EDC9CE /* Enum.swift in Sources */, 4CDDB11B25A422CD00EDC9CE /* Client.swift in Sources */, diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Client.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Client.swift index 823c2150e..d44e49418 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Client.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Client.swift @@ -7,20 +7,6 @@ import Foundation -struct Clients { - var list: [Client] = [] - - init(count: Int) { - for waitingNumber in 1...count { - guard let businessType = BusinessType.allCases.randomElement(), let priority = Client.Priority.allCases.randomElement() else { - return - } - let clinet = Client(waitingNumber: waitingNumber, businessType: businessType, priority: priority) - list.append(clinet) - } - } -} - struct Client { enum Priority: Comparable, CaseIterable, CustomStringConvertible { case VVIP diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Clients.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Clients.swift new file mode 100644 index 000000000..b7dc86d65 --- /dev/null +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Clients.swift @@ -0,0 +1,22 @@ +// +// Clients.swift +// BankManagerConsoleApp +// +// Created by 리나 on 2021/01/12. +// + +import Foundation + +struct Clients { + var list: [Client] = [] + + init(count: Int) { + for waitingNumber in 1...count { + guard let businessType = BusinessType.allCases.randomElement(), let priority = Client.Priority.allCases.randomElement() else { + return + } + let clinet = Client(waitingNumber: waitingNumber, businessType: businessType, priority: priority) + list.append(clinet) + } + } +} From 5849c49274431000c2822973b9f908c1643ee18a Mon Sep 17 00:00:00 2001 From: lina0322 Date: Tue, 12 Jan 2021 23:22:02 +0900 Subject: [PATCH 13/17] =?UTF-8?q?Add:=20enum=EC=95=88=EC=97=90=20=EC=9E=88?= =?UTF-8?q?=EB=8D=98=20type=EB=93=A4=20=EA=B0=81=EA=B0=81=EC=9D=98=20?= =?UTF-8?q?=ED=8C=8C=EC=9D=BC=EB=A1=9C=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../project.pbxproj | 28 ++++++-- .../BankManagerConsoleApp/Enum.swift | 64 ------------------- .../enum/BusinessType.swift | 31 +++++++++ .../BankManagerConsoleApp/enum/Menu.swift | 19 ++++++ .../BankManagerConsoleApp/enum/Message.swift | 16 +++++ .../enum/StringFormattingError.swift | 24 +++++++ 6 files changed, 114 insertions(+), 68 deletions(-) delete mode 100644 BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift create mode 100644 BankManagerConsoleApp/BankManagerConsoleApp/enum/BusinessType.swift create mode 100644 BankManagerConsoleApp/BankManagerConsoleApp/enum/Menu.swift create mode 100644 BankManagerConsoleApp/BankManagerConsoleApp/enum/Message.swift create mode 100644 BankManagerConsoleApp/BankManagerConsoleApp/enum/StringFormattingError.swift diff --git a/BankManagerConsoleApp/BankManagerConsoleApp.xcodeproj/project.pbxproj b/BankManagerConsoleApp/BankManagerConsoleApp.xcodeproj/project.pbxproj index 7fb35fad8..d4818e3f8 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp.xcodeproj/project.pbxproj +++ b/BankManagerConsoleApp/BankManagerConsoleApp.xcodeproj/project.pbxproj @@ -8,11 +8,14 @@ /* Begin PBXBuildFile section */ 4C4D3B9325ADE7320070DB26 /* Clients.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C4D3B9225ADE7320070DB26 /* Clients.swift */; }; + 4C4D3B9725ADE78D0070DB26 /* Menu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C4D3B9625ADE78D0070DB26 /* Menu.swift */; }; + 4C4D3B9B25ADE7A90070DB26 /* Message.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C4D3B9A25ADE7A90070DB26 /* Message.swift */; }; + 4C4D3B9F25ADE7BC0070DB26 /* BusinessType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C4D3B9E25ADE7BC0070DB26 /* BusinessType.swift */; }; 4CB8E9BB25A998E300C021F6 /* HeadOffice.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CB8E9BA25A998E300C021F6 /* HeadOffice.swift */; }; 4CB8E9C425A99CE000C021F6 /* Dashboard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CB8E9C325A99CE000C021F6 /* Dashboard.swift */; }; 4CDDB11825A422B700EDC9CE /* Teller.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CDDB11725A422B700EDC9CE /* Teller.swift */; }; 4CDDB11B25A422CD00EDC9CE /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CDDB11A25A422CD00EDC9CE /* Client.swift */; }; - 4CDDB11E25A422EF00EDC9CE /* Enum.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CDDB11D25A422EF00EDC9CE /* Enum.swift */; }; + 4CDDB11E25A422EF00EDC9CE /* StringFormattingError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CDDB11D25A422EF00EDC9CE /* StringFormattingError.swift */; }; C7694E7A259C3EC00053667F /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7694E79259C3EC00053667F /* main.swift */; }; C7D65D1B259C8190005510E0 /* Bank.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7D65D1A259C8190005510E0 /* Bank.swift */; }; /* End PBXBuildFile section */ @@ -31,11 +34,14 @@ /* Begin PBXFileReference section */ 4C4D3B9225ADE7320070DB26 /* Clients.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Clients.swift; sourceTree = ""; }; + 4C4D3B9625ADE78D0070DB26 /* Menu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Menu.swift; sourceTree = ""; }; + 4C4D3B9A25ADE7A90070DB26 /* Message.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Message.swift; sourceTree = ""; }; + 4C4D3B9E25ADE7BC0070DB26 /* BusinessType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BusinessType.swift; sourceTree = ""; }; 4CB8E9BA25A998E300C021F6 /* HeadOffice.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HeadOffice.swift; sourceTree = ""; }; 4CB8E9C325A99CE000C021F6 /* Dashboard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Dashboard.swift; sourceTree = ""; }; 4CDDB11725A422B700EDC9CE /* Teller.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Teller.swift; sourceTree = ""; }; 4CDDB11A25A422CD00EDC9CE /* Client.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Client.swift; sourceTree = ""; }; - 4CDDB11D25A422EF00EDC9CE /* Enum.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Enum.swift; sourceTree = ""; }; + 4CDDB11D25A422EF00EDC9CE /* StringFormattingError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StringFormattingError.swift; sourceTree = ""; }; C7694E76259C3EC00053667F /* BankManagerConsoleApp */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = BankManagerConsoleApp; sourceTree = BUILT_PRODUCTS_DIR; }; C7694E79259C3EC00053667F /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = ""; }; C7D65D1A259C8190005510E0 /* Bank.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Bank.swift; path = ../../Bank.swift; sourceTree = ""; }; @@ -52,6 +58,17 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 4C4D3BA325ADE7D70070DB26 /* enum */ = { + isa = PBXGroup; + children = ( + 4C4D3B9625ADE78D0070DB26 /* Menu.swift */, + 4C4D3B9A25ADE7A90070DB26 /* Message.swift */, + 4C4D3B9E25ADE7BC0070DB26 /* BusinessType.swift */, + 4CDDB11D25A422EF00EDC9CE /* StringFormattingError.swift */, + ); + path = enum; + sourceTree = ""; + }; C7694E6D259C3EC00053667F = { isa = PBXGroup; children = ( @@ -71,13 +88,13 @@ C7694E78259C3EC00053667F /* BankManagerConsoleApp */ = { isa = PBXGroup; children = ( + 4C4D3BA325ADE7D70070DB26 /* enum */, 4CB8E9BA25A998E300C021F6 /* HeadOffice.swift */, 4CB8E9C325A99CE000C021F6 /* Dashboard.swift */, C7D65D1A259C8190005510E0 /* Bank.swift */, 4CDDB11725A422B700EDC9CE /* Teller.swift */, 4CDDB11A25A422CD00EDC9CE /* Client.swift */, 4C4D3B9225ADE7320070DB26 /* Clients.swift */, - 4CDDB11D25A422EF00EDC9CE /* Enum.swift */, C7694E79259C3EC00053667F /* main.swift */, ); path = BankManagerConsoleApp; @@ -144,10 +161,13 @@ 4CB8E9BB25A998E300C021F6 /* HeadOffice.swift in Sources */, 4C4D3B9325ADE7320070DB26 /* Clients.swift in Sources */, C7D65D1B259C8190005510E0 /* Bank.swift in Sources */, - 4CDDB11E25A422EF00EDC9CE /* Enum.swift in Sources */, + 4CDDB11E25A422EF00EDC9CE /* StringFormattingError.swift in Sources */, 4CDDB11B25A422CD00EDC9CE /* Client.swift in Sources */, + 4C4D3B9725ADE78D0070DB26 /* Menu.swift in Sources */, + 4C4D3B9B25ADE7A90070DB26 /* Message.swift in Sources */, 4CB8E9C425A99CE000C021F6 /* Dashboard.swift in Sources */, 4CDDB11825A422B700EDC9CE /* Teller.swift in Sources */, + 4C4D3B9F25ADE7BC0070DB26 /* BusinessType.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift deleted file mode 100644 index 9af260bb6..000000000 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift +++ /dev/null @@ -1,64 +0,0 @@ -// -// String.swift -// BankManagerConsoleApp -// -// Created by 임리나 on 2021/01/05. -// - -import Foundation - -enum Menu: String { - case start = "1" - case end = "2" - - static let description = """ - 1: 은행 개점 - 2: 종료 - 입력 : - """ -} - -enum Message { - static let close = "업무가 마감되었습니다. 오늘 업무를 처리한 고객은 총 %d명이며, 총 업무시간은 %.2f초입니다." - static let tellerStart = "%d번 %@고객 %@업무 시작" - static let tellerFinish = "%d번 %@고객 %@업무 완료" - static let loanStart = "%d번 %@고객 %@심사 시작" - static let loanFinish = "%d번 %@고객 %@심사 완료" -} - -enum BusinessType: CaseIterable, CustomStringConvertible { - case deposit - case loan - - var neededTime: TimeInterval { - switch self { - case .deposit: - return 0.7 - case .loan: - return 0.3 - } - } - - var description: String { - switch self { - case .deposit: - return "예금" - case .loan: - return "대출" - } - } -} - -enum StringFormattingError: Error, CustomStringConvertible { - case wrongInput - case unknown - - var description: String { - switch self { - case .wrongInput: - return "잘못된 입력입니다. 다시 입력해주세요" - case .unknown: - return "알 수 없는 에러가 발생했습니다." - } - } -} diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/enum/BusinessType.swift b/BankManagerConsoleApp/BankManagerConsoleApp/enum/BusinessType.swift new file mode 100644 index 000000000..ae71dd86d --- /dev/null +++ b/BankManagerConsoleApp/BankManagerConsoleApp/enum/BusinessType.swift @@ -0,0 +1,31 @@ +// +// BusinessType.swift +// BankManagerConsoleApp +// +// Created by 리나 on 2021/01/12. +// + +import Foundation + +enum BusinessType: CaseIterable, CustomStringConvertible { + case deposit + case loan + + var neededTime: TimeInterval { + switch self { + case .deposit: + return 0.7 + case .loan: + return 0.3 + } + } + + var description: String { + switch self { + case .deposit: + return "예금" + case .loan: + return "대출" + } + } +} diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/enum/Menu.swift b/BankManagerConsoleApp/BankManagerConsoleApp/enum/Menu.swift new file mode 100644 index 000000000..abfdaec7e --- /dev/null +++ b/BankManagerConsoleApp/BankManagerConsoleApp/enum/Menu.swift @@ -0,0 +1,19 @@ +// +// Menu.swift +// BankManagerConsoleApp +// +// Created by 리나 on 2021/01/12. +// + +import Foundation + +enum Menu: String { + case start = "1" + case end = "2" + + static let description = """ + 1: 은행 개점 + 2: 종료 + 입력 : + """ +} diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/enum/Message.swift b/BankManagerConsoleApp/BankManagerConsoleApp/enum/Message.swift new file mode 100644 index 000000000..25fd8e812 --- /dev/null +++ b/BankManagerConsoleApp/BankManagerConsoleApp/enum/Message.swift @@ -0,0 +1,16 @@ +// +// Message.swift +// BankManagerConsoleApp +// +// Created by 리나 on 2021/01/12. +// + +import Foundation + +enum Message { + static let close = "업무가 마감되었습니다. 오늘 업무를 처리한 고객은 총 %d명이며, 총 업무시간은 %.2f초입니다." + static let tellerStart = "%d번 %@고객 %@업무 시작" + static let tellerFinish = "%d번 %@고객 %@업무 완료" + static let loanStart = "%d번 %@고객 %@심사 시작" + static let loanFinish = "%d번 %@고객 %@심사 완료" +} diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/enum/StringFormattingError.swift b/BankManagerConsoleApp/BankManagerConsoleApp/enum/StringFormattingError.swift new file mode 100644 index 000000000..0d73acb1a --- /dev/null +++ b/BankManagerConsoleApp/BankManagerConsoleApp/enum/StringFormattingError.swift @@ -0,0 +1,24 @@ +// +// String.swift +// BankManagerConsoleApp +// +// Created by 임리나 on 2021/01/05. +// + +import Foundation + + + +enum StringFormattingError: Error, CustomStringConvertible { + case wrongInput + case unknown + + var description: String { + switch self { + case .wrongInput: + return "잘못된 입력입니다. 다시 입력해주세요" + case .unknown: + return "알 수 없는 에러가 발생했습니다." + } + } +} From 4b3a68bf669b41c75f7954dbd90fb20142ded557 Mon Sep 17 00:00:00 2001 From: lina0322 Date: Tue, 12 Jan 2021 23:39:12 +0900 Subject: [PATCH 14/17] Refactor: operateBank -> open --- Bank.swift | 2 +- .../BankManagerConsoleApp.xcodeproj/project.pbxproj | 6 +++--- .../BankManagerConsoleApp/{enum => Enum}/BusinessType.swift | 0 .../BankManagerConsoleApp/{enum => Enum}/Menu.swift | 0 .../BankManagerConsoleApp/{enum => Enum}/Message.swift | 0 .../{enum => Enum}/StringFormattingError.swift | 0 BankManagerConsoleApp/BankManagerConsoleApp/main.swift | 2 +- 7 files changed, 5 insertions(+), 5 deletions(-) rename BankManagerConsoleApp/BankManagerConsoleApp/{enum => Enum}/BusinessType.swift (100%) rename BankManagerConsoleApp/BankManagerConsoleApp/{enum => Enum}/Menu.swift (100%) rename BankManagerConsoleApp/BankManagerConsoleApp/{enum => Enum}/Message.swift (100%) rename BankManagerConsoleApp/BankManagerConsoleApp/{enum => Enum}/StringFormattingError.swift (100%) diff --git a/Bank.swift b/Bank.swift index 19458799a..c301675dd 100644 --- a/Bank.swift +++ b/Bank.swift @@ -12,7 +12,7 @@ final class Bank { private var finishedClientCount = 0 private var businessTime: TimeInterval? - func operateBank(teller: Int, client: [Client]) { + func open(teller: Int, client: [Client]) { let openTime = Date() initTellers(teller) diff --git a/BankManagerConsoleApp/BankManagerConsoleApp.xcodeproj/project.pbxproj b/BankManagerConsoleApp/BankManagerConsoleApp.xcodeproj/project.pbxproj index d4818e3f8..1830a4189 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp.xcodeproj/project.pbxproj +++ b/BankManagerConsoleApp/BankManagerConsoleApp.xcodeproj/project.pbxproj @@ -58,7 +58,7 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 4C4D3BA325ADE7D70070DB26 /* enum */ = { + 4C4D3BA325ADE7D70070DB26 /* Enum */ = { isa = PBXGroup; children = ( 4C4D3B9625ADE78D0070DB26 /* Menu.swift */, @@ -66,7 +66,7 @@ 4C4D3B9E25ADE7BC0070DB26 /* BusinessType.swift */, 4CDDB11D25A422EF00EDC9CE /* StringFormattingError.swift */, ); - path = enum; + path = Enum; sourceTree = ""; }; C7694E6D259C3EC00053667F = { @@ -88,7 +88,7 @@ C7694E78259C3EC00053667F /* BankManagerConsoleApp */ = { isa = PBXGroup; children = ( - 4C4D3BA325ADE7D70070DB26 /* enum */, + 4C4D3BA325ADE7D70070DB26 /* Enum */, 4CB8E9BA25A998E300C021F6 /* HeadOffice.swift */, 4CB8E9C325A99CE000C021F6 /* Dashboard.swift */, C7D65D1A259C8190005510E0 /* Bank.swift */, diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/enum/BusinessType.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Enum/BusinessType.swift similarity index 100% rename from BankManagerConsoleApp/BankManagerConsoleApp/enum/BusinessType.swift rename to BankManagerConsoleApp/BankManagerConsoleApp/Enum/BusinessType.swift diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/enum/Menu.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Enum/Menu.swift similarity index 100% rename from BankManagerConsoleApp/BankManagerConsoleApp/enum/Menu.swift rename to BankManagerConsoleApp/BankManagerConsoleApp/Enum/Menu.swift diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/enum/Message.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Enum/Message.swift similarity index 100% rename from BankManagerConsoleApp/BankManagerConsoleApp/enum/Message.swift rename to BankManagerConsoleApp/BankManagerConsoleApp/Enum/Message.swift diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/enum/StringFormattingError.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Enum/StringFormattingError.swift similarity index 100% rename from BankManagerConsoleApp/BankManagerConsoleApp/enum/StringFormattingError.swift rename to BankManagerConsoleApp/BankManagerConsoleApp/Enum/StringFormattingError.swift diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/main.swift b/BankManagerConsoleApp/BankManagerConsoleApp/main.swift index e10b7fc71..d582a28d8 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/main.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/main.swift @@ -25,7 +25,7 @@ func main() { case .start: let randomNumber = Int.random(in: minClientCount...maxClientCount) let clients = Clients(count: randomNumber) - bank.operateBank(teller: tellerCount, client: clients.list) + bank.open(teller: tellerCount, client: clients.list) case .end: isContinue = false } From 95adaf985cff7577b59d6d9526fc1ba94065bceb Mon Sep 17 00:00:00 2001 From: lina0322 Date: Wed, 13 Jan 2021 00:33:52 +0900 Subject: [PATCH 15/17] =?UTF-8?q?Feat:=20teller=20init=EC=9D=84=20Tellers?= =?UTF-8?q?=EB=A5=BC=20=EC=83=9D=EC=84=B1=ED=95=98=EA=B3=A0=20=EA=B1=B0?= =?UTF-8?q?=EA=B8=B0=EC=84=9C=20=EC=8B=A4=ED=96=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Bank.swift | 10 ++-------- .../project.pbxproj | 4 ++++ .../BankManagerConsoleApp/Tellers.swift | 18 ++++++++++++++++++ .../BankManagerConsoleApp/main.swift | 4 ++-- 4 files changed, 26 insertions(+), 10 deletions(-) create mode 100644 BankManagerConsoleApp/BankManagerConsoleApp/Tellers.swift diff --git a/Bank.swift b/Bank.swift index c301675dd..e7b110d34 100644 --- a/Bank.swift +++ b/Bank.swift @@ -12,10 +12,10 @@ final class Bank { private var finishedClientCount = 0 private var businessTime: TimeInterval? - func open(teller: Int, client: [Client]) { + func open(teller: [Teller], client: [Client]) { let openTime = Date() - initTellers(teller) + tellers = teller clients = client.sorted() assignBusinessToTeller() businessTime = Date().timeIntervalSince(openTime) @@ -23,12 +23,6 @@ final class Bank { closeBank() } - private func initTellers(_ count: Int) { - for windowNumber in 1...count { - tellers.append(Teller(windowNumber: windowNumber)) - } - } - private func assignBusinessToTeller() { let dispatchGroup = DispatchGroup() var isContinue = true diff --git a/BankManagerConsoleApp/BankManagerConsoleApp.xcodeproj/project.pbxproj b/BankManagerConsoleApp/BankManagerConsoleApp.xcodeproj/project.pbxproj index 1830a4189..a088ffc3d 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp.xcodeproj/project.pbxproj +++ b/BankManagerConsoleApp/BankManagerConsoleApp.xcodeproj/project.pbxproj @@ -11,6 +11,7 @@ 4C4D3B9725ADE78D0070DB26 /* Menu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C4D3B9625ADE78D0070DB26 /* Menu.swift */; }; 4C4D3B9B25ADE7A90070DB26 /* Message.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C4D3B9A25ADE7A90070DB26 /* Message.swift */; }; 4C4D3B9F25ADE7BC0070DB26 /* BusinessType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C4D3B9E25ADE7BC0070DB26 /* BusinessType.swift */; }; + 4C529BAA25ADF6FC00F287A8 /* Tellers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C529BA925ADF6FC00F287A8 /* Tellers.swift */; }; 4CB8E9BB25A998E300C021F6 /* HeadOffice.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CB8E9BA25A998E300C021F6 /* HeadOffice.swift */; }; 4CB8E9C425A99CE000C021F6 /* Dashboard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CB8E9C325A99CE000C021F6 /* Dashboard.swift */; }; 4CDDB11825A422B700EDC9CE /* Teller.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CDDB11725A422B700EDC9CE /* Teller.swift */; }; @@ -37,6 +38,7 @@ 4C4D3B9625ADE78D0070DB26 /* Menu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Menu.swift; sourceTree = ""; }; 4C4D3B9A25ADE7A90070DB26 /* Message.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Message.swift; sourceTree = ""; }; 4C4D3B9E25ADE7BC0070DB26 /* BusinessType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BusinessType.swift; sourceTree = ""; }; + 4C529BA925ADF6FC00F287A8 /* Tellers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Tellers.swift; sourceTree = ""; }; 4CB8E9BA25A998E300C021F6 /* HeadOffice.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HeadOffice.swift; sourceTree = ""; }; 4CB8E9C325A99CE000C021F6 /* Dashboard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Dashboard.swift; sourceTree = ""; }; 4CDDB11725A422B700EDC9CE /* Teller.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Teller.swift; sourceTree = ""; }; @@ -93,6 +95,7 @@ 4CB8E9C325A99CE000C021F6 /* Dashboard.swift */, C7D65D1A259C8190005510E0 /* Bank.swift */, 4CDDB11725A422B700EDC9CE /* Teller.swift */, + 4C529BA925ADF6FC00F287A8 /* Tellers.swift */, 4CDDB11A25A422CD00EDC9CE /* Client.swift */, 4C4D3B9225ADE7320070DB26 /* Clients.swift */, C7694E79259C3EC00053667F /* main.swift */, @@ -168,6 +171,7 @@ 4CB8E9C425A99CE000C021F6 /* Dashboard.swift in Sources */, 4CDDB11825A422B700EDC9CE /* Teller.swift in Sources */, 4C4D3B9F25ADE7BC0070DB26 /* BusinessType.swift in Sources */, + 4C529BAA25ADF6FC00F287A8 /* Tellers.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Tellers.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Tellers.swift new file mode 100644 index 000000000..cfb796178 --- /dev/null +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Tellers.swift @@ -0,0 +1,18 @@ +// +// Tellers.swift +// BankManagerConsoleApp +// +// Created by 리나 on 2021/01/13. +// + +import Foundation + +struct Tellers { + var list: [Teller] = [] + + init(count: Int) { + for windowNumber in 1...count { + list.append(Teller(windowNumber: windowNumber)) + } + } +} diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/main.swift b/BankManagerConsoleApp/BankManagerConsoleApp/main.swift index d582a28d8..817444848 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/main.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/main.swift @@ -8,7 +8,7 @@ import Foundation func main() { let bank = Bank() - let tellerCount = 3 + let tellers = Tellers(count: 3) let maxClientCount = 30 let minClientCount = 10 var isContinue = true @@ -25,7 +25,7 @@ func main() { case .start: let randomNumber = Int.random(in: minClientCount...maxClientCount) let clients = Clients(count: randomNumber) - bank.open(teller: tellerCount, client: clients.list) + bank.open(teller: tellers.list, client: clients.list) case .end: isContinue = false } From 4c547e86ed9394831cc9b15487af068769bf1a3a Mon Sep 17 00:00:00 2001 From: lina0322 Date: Wed, 13 Jan 2021 00:41:48 +0900 Subject: [PATCH 16/17] =?UTF-8?q?Refactor:=20closeBank=20->=20resetFinishe?= =?UTF-8?q?dClientCount=20=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Bank.swift | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/Bank.swift b/Bank.swift index e7b110d34..5de93d7ef 100644 --- a/Bank.swift +++ b/Bank.swift @@ -20,7 +20,7 @@ final class Bank { assignBusinessToTeller() businessTime = Date().timeIntervalSince(openTime) Dashboard.printCloseMessage(finishedClientCount, businessTime) - closeBank() + resetFinishedClientCount() } private func assignBusinessToTeller() { @@ -43,9 +43,7 @@ final class Bank { dispatchGroup.wait() } - private func closeBank() { - tellers.removeAll() - clients.removeAll() + private func resetFinishedClientCount() { finishedClientCount = 0 } } From 04d69104874177a3908d67f1a79d4dcda0ed9cd9 Mon Sep 17 00:00:00 2001 From: lina0322 Date: Wed, 13 Jan 2021 00:56:58 +0900 Subject: [PATCH 17/17] =?UTF-8?q?Feat:=20handleLoan=EC=9D=84=20reviewDocum?= =?UTF-8?q?ent,=20sendDocumentToHeadOffice,=20finishLoan=20=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BankManagerConsoleApp/Teller.swift | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift index d0b95a35a..0bf121949 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift @@ -34,23 +34,35 @@ final class Teller { } } - func handleDeposit(for client: Client) { + private func handleDeposit(for client: Client) { Dashboard.printStatus(for: client, about: Message.tellerStart) Thread.sleep(forTimeInterval: client.businessType.neededTime) Dashboard.printStatus(for: client, about: Message.tellerFinish) } - func handleLoan(for client: Client) { - let semaphore = DispatchSemaphore(value: 0) - + private func handleLoan(for client: Client) { + reviewDocument(for: client) + sendDocumentToHeadOffice(for: client) + finishLoan(for: client) + } + + private func reviewDocument(for client: Client) { Dashboard.printStatus(for: client, about: Message.tellerStart) Thread.sleep(forTimeInterval: client.businessType.neededTime) + } + + private func sendDocumentToHeadOffice(for client: Client) { + let semaphore = DispatchSemaphore(value: 0) + HeadOffice.shared.loanQueue.async { HeadOffice.shared.judgeLoan(for: client) semaphore.signal() } semaphore.wait() + } + + private func finishLoan(for client: Client) { Thread.sleep(forTimeInterval: client.businessType.neededTime) Dashboard.printStatus(for: client, about: Message.tellerFinish) }