From 8cef375852036b2ab2c28dfc2c1fa115debc9c99 Mon Sep 17 00:00:00 2001 From: lina0322 Date: Tue, 5 Jan 2021 13:51:10 +0900 Subject: [PATCH 01/43] =?UTF-8?q?Feat:=20BankManager=20=ED=94=84=EB=A1=9C?= =?UTF-8?q?=ED=8D=BC=ED=8B=B0=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BankManager.swift | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/BankManager.swift b/BankManager.swift index 903471210..329c34992 100644 --- a/BankManager.swift +++ b/BankManager.swift @@ -5,3 +5,15 @@ // import Foundation + +class BankManager { + private var tellers: [Teller] = [] + private var clients: [Client] = [] + private var needTimeToWork: Double = 0.7 + private var numberOfClients: Int { + return clients.count + } + private var businessTimes: Double { + return Double(numberOfClients) * needTimeToWork + } +} From 51bebcde1ec207dcb8d99ffefc019d544f4a077e Mon Sep 17 00:00:00 2001 From: lina0322 Date: Tue, 5 Jan 2021 13:52:14 +0900 Subject: [PATCH 02/43] Feat: printMenu, init teller and clinet in BankManager --- BankManager.swift | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/BankManager.swift b/BankManager.swift index 329c34992..b78a4bc41 100644 --- a/BankManager.swift +++ b/BankManager.swift @@ -16,4 +16,20 @@ class BankManager { private var businessTimes: Double { return Double(numberOfClients) * needTimeToWork } + + func printMenu() { + print(BankMenu.description, terminator: "") + } + + private func initTellerNumber(_ number: Int) { + for windowNumber in 1...number { + tellers.append(Teller(windowNumber: windowNumber)) + } + } + + private func initClientNumber(_ number: Int) { + for waitingNumber in 1...number { + clients.append(Client(waitingNumber: waitingNumber, needTimeToWork: needTimeToWork)) + } + } } From 9ac55c65bf0a4bfdde6b8c686fb50c9d20e8a38a Mon Sep 17 00:00:00 2001 From: lina0322 Date: Tue, 5 Jan 2021 13:53:00 +0900 Subject: [PATCH 03/43] Feat: assignBusinessToTeller and printCloseMessage in BankManager --- BankManager.swift | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/BankManager.swift b/BankManager.swift index b78a4bc41..2bdb4c42e 100644 --- a/BankManager.swift +++ b/BankManager.swift @@ -32,4 +32,21 @@ class BankManager { clients.append(Client(waitingNumber: waitingNumber, needTimeToWork: needTimeToWork)) } } + + private func assignBusinessToTeller() { + for client in clients { + for teller in tellers { + if teller.isNotWorking { + teller.handleBusiness(for: client) + break; + } + } + } + } + + private func printCloseMessage() { + let businessTimesText: String = String(format: "%.2f", businessTimes) + let message = Bank.closeCommentFront + "\(numberOfClients)" + Bank.closeCommentMiddle + "\(businessTimesText)" + Bank.closeCommentEnd + print(message) + } } From f5c01bc46097cde42d91148886fe4bdc1ba366d2 Mon Sep 17 00:00:00 2001 From: lina0322 Date: Tue, 5 Jan 2021 13:54:10 +0900 Subject: [PATCH 04/43] Refacotr: comment -> message --- BankManager.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/BankManager.swift b/BankManager.swift index 2bdb4c42e..73c09614c 100644 --- a/BankManager.swift +++ b/BankManager.swift @@ -20,7 +20,7 @@ class BankManager { func printMenu() { print(BankMenu.description, terminator: "") } - + private func initTellerNumber(_ number: Int) { for windowNumber in 1...number { tellers.append(Teller(windowNumber: windowNumber)) @@ -46,7 +46,7 @@ class BankManager { private func printCloseMessage() { let businessTimesText: String = String(format: "%.2f", businessTimes) - let message = Bank.closeCommentFront + "\(numberOfClients)" + Bank.closeCommentMiddle + "\(businessTimesText)" + Bank.closeCommentEnd + let message = Bank.closeMessageFront + "\(numberOfClients)" + Bank.closeMessageMiddle + "\(businessTimesText)" + Bank.closeMessageEnd print(message) } } From 4d7c3de503ad26082971d90ac8303a3fa404b3e6 Mon Sep 17 00:00:00 2001 From: lina0322 Date: Tue, 5 Jan 2021 13:54:37 +0900 Subject: [PATCH 05/43] Feat: operateBank --- BankManager.swift | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/BankManager.swift b/BankManager.swift index 73c09614c..ed7869bfe 100644 --- a/BankManager.swift +++ b/BankManager.swift @@ -21,6 +21,13 @@ class BankManager { print(BankMenu.description, terminator: "") } + func operateBank(teller: Int, client: Int) { + initTellerNumber(teller) + initClientNumber(client) + assignBusinessToTeller() + printCloseMessage() + } + private func initTellerNumber(_ number: Int) { for windowNumber in 1...number { tellers.append(Teller(windowNumber: windowNumber)) From f01255295be3f4cf57a6306d8b8f33fd7ae00193 Mon Sep 17 00:00:00 2001 From: lina0322 Date: Tue, 5 Jan 2021 13:55:29 +0900 Subject: [PATCH 06/43] =?UTF-8?q?Feat:=20String=EB=93=A4=20enum=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/Enum.swift | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift new file mode 100644 index 000000000..e1d6eb1a0 --- /dev/null +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift @@ -0,0 +1,27 @@ +// +// String.swift +// BankManagerConsoleApp +// +// Created by 임리나 on 2021/01/05. +// + +import Foundation + +enum BankMenu: String { + case start = "1" + case end = "2" + + static let description = "1: 은행 개점\n2: 종료\n입력 : " +} + +enum Bank { + static let closeMessageFront = "업무가 마감되었습니다. 오늘 업무를 처리한 고객은 총 " + static let closeMessageMiddle = "명이며, 총 업무시간은 " + static let closeMessageEnd = "초입니다." + + static let tellerCommentMiddle = "번 창구 : " + static let tellerCommentStart = "번 고객 업무 시작" + static let tellerCommentEnd = "번 고객 업무 완료" + + static let milliseconds: Double = 1000000 +} From bbae88e350052a5bc8d2e3390a70d136c3ddd449 Mon Sep 17 00:00:00 2001 From: lina0322 Date: Tue, 5 Jan 2021 13:55:49 +0900 Subject: [PATCH 07/43] Feat: BankError --- .../BankManagerConsoleApp/Enum.swift | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift index e1d6eb1a0..c27e24b37 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift @@ -25,3 +25,19 @@ enum Bank { static let milliseconds: Double = 1000000 } + +enum BankError: Error { + case wrongInput + case unknown +} + +extension BankError: LocalizedError { + private var errorDescription: String { + switch self { + case .wrongInput: + return "잘못된 입력입니다. 다시 입력해주세요" + case .unknown: + return "알 수 없는 에러입니다." + } + } +} From 4527baebd394ae140a3e382dd97170083a9efd61 Mon Sep 17 00:00:00 2001 From: lina0322 Date: Tue, 5 Jan 2021 13:56:54 +0900 Subject: [PATCH 08/43] Refactor: tellerComment -> tellerMessage --- BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift index c27e24b37..569fa0cf1 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift @@ -19,9 +19,9 @@ enum Bank { static let closeMessageMiddle = "명이며, 총 업무시간은 " static let closeMessageEnd = "초입니다." - static let tellerCommentMiddle = "번 창구 : " - static let tellerCommentStart = "번 고객 업무 시작" - static let tellerCommentEnd = "번 고객 업무 완료" + static let tellerMessageMiddle = "번 창구 : " + static let tellerMessageStart = "번 고객 업무 시작" + static let tellerMessageEnd = "번 고객 업무 완료" static let milliseconds: Double = 1000000 } From b4787a22e5b5a4ed93c504c720701921ee6de986 Mon Sep 17 00:00:00 2001 From: lina0322 Date: Tue, 5 Jan 2021 13:57:18 +0900 Subject: [PATCH 09/43] Feat: Client --- .../BankManagerConsoleApp/Client.swift | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 BankManagerConsoleApp/BankManagerConsoleApp/Client.swift diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Client.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Client.swift new file mode 100644 index 000000000..58ad2bc7d --- /dev/null +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Client.swift @@ -0,0 +1,18 @@ +// +// Client.swift +// BankManagerConsoleApp +// +// Created by 임리나 on 2021/01/05. +// + +import Foundation + +class Client { + let waitingNumber: Int + let needTimeToWork: Double + + init(waitingNumber: Int, needTimeToWork: Double) { + self.waitingNumber = waitingNumber + self.needTimeToWork = needTimeToWork + } +} From 1e49995c5e7f4a9415751f3f603f8f8e5333adbf Mon Sep 17 00:00:00 2001 From: lina0322 Date: Tue, 5 Jan 2021 13:58:00 +0900 Subject: [PATCH 10/43] Feat: Teller --- .../BankManagerConsoleApp/Teller.swift | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift new file mode 100644 index 000000000..6348acbd9 --- /dev/null +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift @@ -0,0 +1,20 @@ +// +// Teller.swift +// BankManagerConsoleApp +// +// Created by 임리나 on 2021/01/05. +// + +import Foundation + +class Teller: OperationQueue { + var windowNumber: Int + var isWorking: Bool = false + var isNotWorking: Bool { + return !isWorking + } + + init(windowNumber: Int) { + self.windowNumber = windowNumber + } +} From 62178cf62b02c47e7841e60dfdd95ac39bc3aee2 Mon Sep 17 00:00:00 2001 From: lina0322 Date: Tue, 5 Jan 2021 13:58:35 +0900 Subject: [PATCH 11/43] Feat: printStart and FinishBusiness in Teller --- .../BankManagerConsoleApp/Teller.swift | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift index 6348acbd9..0e85b04d7 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift @@ -17,4 +17,14 @@ class Teller: OperationQueue { init(windowNumber: Int) { self.windowNumber = windowNumber } + + func printStartBusiness(number: Int) { + let message = "\(windowNumber)" + Bank.tellerMessageMiddle + "\(number)" + Bank.tellerMessageStart + print(message) + } + + func printFinishBusiness(number: Int) { + let message = "\(windowNumber)" + Bank.tellerMessageMiddle + "\(number)" + Bank.tellerMessageEnd + print(message) + } } From 0bdffb783e9edc019b1a3e5d798f28f16cec1cc2 Mon Sep 17 00:00:00 2001 From: lina0322 Date: Tue, 5 Jan 2021 13:58:58 +0900 Subject: [PATCH 12/43] Feat: handleBusiness in Teller --- .../BankManagerConsoleApp/Teller.swift | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift index 0e85b04d7..ed973f7ca 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift @@ -18,6 +18,16 @@ class Teller: OperationQueue { self.windowNumber = windowNumber } + func handleBusiness(for client: Client) { + let timeToWork: UInt32 = UInt32(Bank.milliseconds * client.needTimeToWork) + + isWorking = true + printStartBusiness(number: client.waitingNumber) + usleep(timeToWork) + printFinishBusiness(number: client.waitingNumber) + isWorking = false + } + func printStartBusiness(number: Int) { let message = "\(windowNumber)" + Bank.tellerMessageMiddle + "\(number)" + Bank.tellerMessageStart print(message) From 8c8670375095686091332c4517e380b4913f5d11 Mon Sep 17 00:00:00 2001 From: lina0322 Date: Tue, 5 Jan 2021 14:00:06 +0900 Subject: [PATCH 13/43] Feat: main --- .../BankManagerConsoleApp/main.swift | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/main.swift b/BankManagerConsoleApp/BankManagerConsoleApp/main.swift index 1aa9854cb..ed07f4897 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/main.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/main.swift @@ -5,3 +5,32 @@ // import Foundation + +func main() { + let bank = BankManager() + let tellerNumber = 1 + var isStart = true + var clientNumber: Int { + return Int.random(in: 10...30) + } + + while isStart { + bank.printMenu() + + guard let input = readLine() else { + print(BankError.wrongInput.localizedDescription) + continue + } + + switch input { + case BankMenu.start.rawValue: + bank.operateBank(teller: tellerNumber, client: clientNumber) + case BankMenu.end.rawValue: + isStart = false + default: + print(BankError.wrongInput.localizedDescription) + } + } +} + +main() From 588f0d1ecc9370789d20dbf3552b82e8eee45ce1 Mon Sep 17 00:00:00 2001 From: lina0322 Date: Tue, 5 Jan 2021 14:00:30 +0900 Subject: [PATCH 14/43] Fix: project file --- .../project.pbxproj | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/BankManagerConsoleApp/BankManagerConsoleApp.xcodeproj/project.pbxproj b/BankManagerConsoleApp/BankManagerConsoleApp.xcodeproj/project.pbxproj index 6b40a668c..fc6415477 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp.xcodeproj/project.pbxproj +++ b/BankManagerConsoleApp/BankManagerConsoleApp.xcodeproj/project.pbxproj @@ -7,6 +7,9 @@ objects = { /* Begin PBXBuildFile section */ + 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 */; }; C7694E7A259C3EC00053667F /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7694E79259C3EC00053667F /* main.swift */; }; C7D65D1B259C8190005510E0 /* BankManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7D65D1A259C8190005510E0 /* BankManager.swift */; }; /* End PBXBuildFile section */ @@ -24,6 +27,9 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 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 = ""; }; 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 /* BankManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = BankManager.swift; path = ../../BankManager.swift; sourceTree = ""; }; @@ -60,6 +66,9 @@ isa = PBXGroup; children = ( C7D65D1A259C8190005510E0 /* BankManager.swift */, + 4CDDB11725A422B700EDC9CE /* Teller.swift */, + 4CDDB11A25A422CD00EDC9CE /* Client.swift */, + 4CDDB11D25A422EF00EDC9CE /* Enum.swift */, C7694E79259C3EC00053667F /* main.swift */, ); path = BankManagerConsoleApp; @@ -92,7 +101,7 @@ isa = PBXProject; attributes = { LastSwiftUpdateCheck = 1210; - LastUpgradeCheck = 1210; + LastUpgradeCheck = 1220; TargetAttributes = { C7694E75259C3EC00053667F = { CreatedOnToolsVersion = 12.1; @@ -124,6 +133,9 @@ files = ( C7694E7A259C3EC00053667F /* main.swift in Sources */, C7D65D1B259C8190005510E0 /* BankManager.swift in Sources */, + 4CDDB11E25A422EF00EDC9CE /* Enum.swift in Sources */, + 4CDDB11B25A422CD00EDC9CE /* Client.swift in Sources */, + 4CDDB11825A422B700EDC9CE /* Teller.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -248,6 +260,7 @@ C7694E7E259C3EC00053667F /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + CODE_SIGN_IDENTITY = "-"; CODE_SIGN_STYLE = Automatic; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; @@ -257,6 +270,7 @@ C7694E7F259C3EC00053667F /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + CODE_SIGN_IDENTITY = "-"; CODE_SIGN_STYLE = Automatic; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; From ce400a7dbd8ab2d6a5edc299f412970da463b563 Mon Sep 17 00:00:00 2001 From: lina0322 Date: Tue, 5 Jan 2021 14:07:37 +0900 Subject: [PATCH 15/43] =?UTF-8?q?Fix:=20=EC=97=90=EB=9F=AC=20=EB=AC=B8?= =?UTF-8?q?=EA=B5=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift | 8 +++----- BankManagerConsoleApp/BankManagerConsoleApp/main.swift | 4 ++-- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift index 569fa0cf1..5fd698be1 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift @@ -29,15 +29,13 @@ enum Bank { enum BankError: Error { case wrongInput case unknown -} - -extension BankError: LocalizedError { - private var errorDescription: String { + + var description: String { switch self { case .wrongInput: return "잘못된 입력입니다. 다시 입력해주세요" case .unknown: - return "알 수 없는 에러입니다." + return "알 수 없는 에러가 발생했습니다." } } } diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/main.swift b/BankManagerConsoleApp/BankManagerConsoleApp/main.swift index ed07f4897..4876dca21 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/main.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/main.swift @@ -18,7 +18,7 @@ func main() { bank.printMenu() guard let input = readLine() else { - print(BankError.wrongInput.localizedDescription) + print(BankError.wrongInput.description) continue } @@ -28,7 +28,7 @@ func main() { case BankMenu.end.rawValue: isStart = false default: - print(BankError.wrongInput.localizedDescription) + print(BankError.wrongInput.description) } } } From d5fa06985ce8bae48b194a0d1dff40ff4e903180 Mon Sep 17 00:00:00 2001 From: lina0322 Date: Tue, 5 Jan 2021 14:35:31 +0900 Subject: [PATCH 16/43] =?UTF-8?q?Feat:=20DispatchQueue=20=EC=82=AC?= =?UTF-8?q?=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BankManager.swift | 21 +++++++++++++------ .../BankManagerConsoleApp/Teller.swift | 8 +++---- .../BankManagerConsoleApp/main.swift | 2 +- 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/BankManager.swift b/BankManager.swift index ed7869bfe..47424bf71 100644 --- a/BankManager.swift +++ b/BankManager.swift @@ -10,6 +10,7 @@ class BankManager { private var tellers: [Teller] = [] private var clients: [Client] = [] private var needTimeToWork: Double = 0.7 + private var currentClientNumber = 0 private var numberOfClients: Int { return clients.count } @@ -20,11 +21,12 @@ class BankManager { func printMenu() { print(BankMenu.description, terminator: "") } - + func operateBank(teller: Int, client: Int) { initTellerNumber(teller) initClientNumber(client) assignBusinessToTeller() + sleep(1) printCloseMessage() } @@ -41,11 +43,18 @@ class BankManager { } private func assignBusinessToTeller() { - for client in clients { - for teller in tellers { - if teller.isNotWorking { - teller.handleBusiness(for: client) - break; + var `continue` = true + while `continue` { + DispatchQueue.global().async { + for teller in self.tellers { + if self.currentClientNumber >= self.numberOfClients { + `continue` = false + break + } + if teller.isNotWorking { + self.currentClientNumber += 1 + teller.handleBusiness(for: self.currentClientNumber) + } } } } diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift index ed973f7ca..b765f93a3 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift @@ -18,13 +18,13 @@ class Teller: OperationQueue { self.windowNumber = windowNumber } - func handleBusiness(for client: Client) { - let timeToWork: UInt32 = UInt32(Bank.milliseconds * client.needTimeToWork) + func handleBusiness(for client: Int) { + let timeToWork: UInt32 = UInt32(Bank.milliseconds * 0.7) isWorking = true - printStartBusiness(number: client.waitingNumber) + printStartBusiness(number: client) usleep(timeToWork) - printFinishBusiness(number: client.waitingNumber) + printFinishBusiness(number: client) isWorking = false } diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/main.swift b/BankManagerConsoleApp/BankManagerConsoleApp/main.swift index 4876dca21..bd6d4cf74 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/main.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/main.swift @@ -8,7 +8,7 @@ import Foundation func main() { let bank = BankManager() - let tellerNumber = 1 + let tellerNumber = 2 var isStart = true var clientNumber: Int { return Int.random(in: 10...30) From 72a00d9cea4a066e833a3d4b52d3b7472b1d002a Mon Sep 17 00:00:00 2001 From: lina0322 Date: Tue, 5 Jan 2021 14:49:50 +0900 Subject: [PATCH 17/43] =?UTF-8?q?Refactor:=20=EC=A0=91=EA=B7=BC=EC=A0=9C?= =?UTF-8?q?=ED=95=9C=EC=9E=90=20=EB=93=B1=20=EC=9E=91=EC=9D=80=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=EB=93=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BankManager.swift | 8 ++++---- .../BankManagerConsoleApp/Client.swift | 6 ++---- .../BankManagerConsoleApp/Teller.swift | 20 ++++++++++--------- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/BankManager.swift b/BankManager.swift index 47424bf71..417dae5f0 100644 --- a/BankManager.swift +++ b/BankManager.swift @@ -6,11 +6,11 @@ import Foundation -class BankManager { +final class BankManager { private var tellers: [Teller] = [] private var clients: [Client] = [] - private var needTimeToWork: Double = 0.7 private var currentClientNumber = 0 + private var needTimeToWork = 0.7 private var numberOfClients: Int { return clients.count } @@ -32,13 +32,13 @@ class BankManager { private func initTellerNumber(_ number: Int) { for windowNumber in 1...number { - tellers.append(Teller(windowNumber: windowNumber)) + tellers.append(Teller(windowNumber: windowNumber, needTimeToWork: needTimeToWork)) } } private func initClientNumber(_ number: Int) { for waitingNumber in 1...number { - clients.append(Client(waitingNumber: waitingNumber, needTimeToWork: needTimeToWork)) + clients.append(Client(waitingNumber: waitingNumber)) } } diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Client.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Client.swift index 58ad2bc7d..bbafc6a59 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Client.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Client.swift @@ -7,12 +7,10 @@ import Foundation -class Client { +final class Client { let waitingNumber: Int - let needTimeToWork: Double - init(waitingNumber: Int, needTimeToWork: Double) { + init(waitingNumber: Int) { self.waitingNumber = waitingNumber - self.needTimeToWork = needTimeToWork } } diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift index b765f93a3..852edf96f 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift @@ -7,33 +7,35 @@ import Foundation -class Teller: OperationQueue { - var windowNumber: Int - var isWorking: Bool = false +final class Teller: OperationQueue { + private var windowNumber: Int + private var isWorking: Bool = false + private var needTimeToWork: Double var isNotWorking: Bool { return !isWorking } - init(windowNumber: Int) { + init(windowNumber: Int, needTimeToWork: Double) { self.windowNumber = windowNumber + self.needTimeToWork = needTimeToWork } func handleBusiness(for client: Int) { - let timeToWork: UInt32 = UInt32(Bank.milliseconds * 0.7) + let timeToWork: UInt32 = UInt32(Bank.milliseconds * needTimeToWork) isWorking = true - printStartBusiness(number: client) + printStartBusiness(for: client) usleep(timeToWork) - printFinishBusiness(number: client) + printFinishBusiness(for: client) isWorking = false } - func printStartBusiness(number: Int) { + private func printStartBusiness(for number: Int) { let message = "\(windowNumber)" + Bank.tellerMessageMiddle + "\(number)" + Bank.tellerMessageStart print(message) } - func printFinishBusiness(number: Int) { + private func printFinishBusiness(for number: Int) { let message = "\(windowNumber)" + Bank.tellerMessageMiddle + "\(number)" + Bank.tellerMessageEnd print(message) } From db02065660621e34fa4235ab21acdda9fc9a32ef Mon Sep 17 00:00:00 2001 From: lina0322 Date: Tue, 5 Jan 2021 14:53:01 +0900 Subject: [PATCH 18/43] Feat: reset in BankManager --- BankManager.swift | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/BankManager.swift b/BankManager.swift index 417dae5f0..308cab822 100644 --- a/BankManager.swift +++ b/BankManager.swift @@ -28,6 +28,7 @@ final class BankManager { assignBusinessToTeller() sleep(1) printCloseMessage() + reset() } private func initTellerNumber(_ number: Int) { @@ -65,4 +66,10 @@ final class BankManager { let message = Bank.closeMessageFront + "\(numberOfClients)" + Bank.closeMessageMiddle + "\(businessTimesText)" + Bank.closeMessageEnd print(message) } + + private func reset() { + tellers.removeAll() + clients.removeAll() + currentClientNumber = 0 + } } From 1bc91a0dcfc4c3939adb9a59fd7ddd216eeb25c1 Mon Sep 17 00:00:00 2001 From: lina0322 Date: Tue, 5 Jan 2021 15:03:39 +0900 Subject: [PATCH 19/43] =?UTF-8?q?Refactor:=20=EB=B3=80=EC=88=98=EB=AA=85,?= =?UTF-8?q?=20=ED=8C=8C=EB=9D=BC=ED=94=BC=ED=84=B0=20=EC=9C=84=EC=B9=98=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BankManager.swift | 14 +++++++------- .../BankManagerConsoleApp/Teller.swift | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/BankManager.swift b/BankManager.swift index 308cab822..66a5ad895 100644 --- a/BankManager.swift +++ b/BankManager.swift @@ -9,13 +9,13 @@ import Foundation final class BankManager { private var tellers: [Teller] = [] private var clients: [Client] = [] - private var currentClientNumber = 0 private var needTimeToWork = 0.7 - private var numberOfClients: Int { + private var currentClientNumber = 0 + private var totalClientNumber: Int { return clients.count } private var businessTimes: Double { - return Double(numberOfClients) * needTimeToWork + return Double(totalClientNumber) * needTimeToWork } func printMenu() { @@ -28,7 +28,7 @@ final class BankManager { assignBusinessToTeller() sleep(1) printCloseMessage() - reset() + closeBank() } private func initTellerNumber(_ number: Int) { @@ -48,7 +48,7 @@ final class BankManager { while `continue` { DispatchQueue.global().async { for teller in self.tellers { - if self.currentClientNumber >= self.numberOfClients { + if self.currentClientNumber >= self.totalClientNumber { `continue` = false break } @@ -63,11 +63,11 @@ final class BankManager { private func printCloseMessage() { let businessTimesText: String = String(format: "%.2f", businessTimes) - let message = Bank.closeMessageFront + "\(numberOfClients)" + Bank.closeMessageMiddle + "\(businessTimesText)" + Bank.closeMessageEnd + let message = Bank.closeMessageFront + "\(totalClientNumber)" + Bank.closeMessageMiddle + "\(businessTimesText)" + Bank.closeMessageEnd print(message) } - private func reset() { + private func closeBank() { tellers.removeAll() clients.removeAll() currentClientNumber = 0 diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift index 852edf96f..d39898b8f 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift @@ -9,8 +9,8 @@ import Foundation final class Teller: OperationQueue { private var windowNumber: Int - private var isWorking: Bool = false private var needTimeToWork: Double + private var isWorking: Bool = false var isNotWorking: Bool { return !isWorking } From 512127501d53155d9c37eff0167ec0e16bafaeab Mon Sep 17 00:00:00 2001 From: lina0322 Date: Tue, 5 Jan 2021 15:07:13 +0900 Subject: [PATCH 20/43] =?UTF-8?q?Refactor:=20=EC=9D=80=ED=96=89=20?= =?UTF-8?q?=EC=A7=81=EC=9B=90=201=EB=AA=85=EC=9C=BC=EB=A1=9C=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= 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 bd6d4cf74..4876dca21 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/main.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/main.swift @@ -8,7 +8,7 @@ import Foundation func main() { let bank = BankManager() - let tellerNumber = 2 + let tellerNumber = 1 var isStart = true var clientNumber: Int { return Int.random(in: 10...30) From b8eca0d0cd77d23c321ae21883245f44762abfa5 Mon Sep 17 00:00:00 2001 From: lina0322 Date: Tue, 5 Jan 2021 21:17:54 +0900 Subject: [PATCH 21/43] =?UTF-8?q?Feat:=20BusinessType=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BankManager.swift | 13 ++++++++----- .../BankManagerConsoleApp/Client.swift | 4 +++- .../BankManagerConsoleApp/Enum.swift | 13 ++++++++++++- .../BankManagerConsoleApp/Teller.swift | 16 +++++++--------- .../BankManagerConsoleApp/main.swift | 2 +- 5 files changed, 31 insertions(+), 17 deletions(-) diff --git a/BankManager.swift b/BankManager.swift index 66a5ad895..1b439c852 100644 --- a/BankManager.swift +++ b/BankManager.swift @@ -9,13 +9,16 @@ import Foundation final class BankManager { private var tellers: [Teller] = [] private var clients: [Client] = [] - private var needTimeToWork = 0.7 private var currentClientNumber = 0 private var totalClientNumber: Int { return clients.count } private var businessTimes: Double { - return Double(totalClientNumber) * needTimeToWork + var sum: Double = 0 + clients.forEach { client in + sum += client.businessType.neededTime + } + return sum } func printMenu() { @@ -33,7 +36,7 @@ final class BankManager { private func initTellerNumber(_ number: Int) { for windowNumber in 1...number { - tellers.append(Teller(windowNumber: windowNumber, needTimeToWork: needTimeToWork)) + tellers.append(Teller(windowNumber: windowNumber)) } } @@ -48,13 +51,13 @@ final class BankManager { while `continue` { DispatchQueue.global().async { for teller in self.tellers { - if self.currentClientNumber >= self.totalClientNumber { + if self.currentClientNumber > self.totalClientNumber { `continue` = false break } if teller.isNotWorking { + teller.handleBusiness(for: self.clients[self.currentClientNumber]) self.currentClientNumber += 1 - teller.handleBusiness(for: self.currentClientNumber) } } } diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Client.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Client.swift index bbafc6a59..a38ee05cb 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Client.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Client.swift @@ -9,8 +9,10 @@ import Foundation final class Client { let waitingNumber: Int + let businessType: BusinessType - init(waitingNumber: Int) { + init(waitingNumber: Int, businessType: BusinessType = .normal) { self.waitingNumber = waitingNumber + self.businessType = businessType } } diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift index 5fd698be1..07a31fafa 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift @@ -22,10 +22,21 @@ enum Bank { static let tellerMessageMiddle = "번 창구 : " static let tellerMessageStart = "번 고객 업무 시작" static let tellerMessageEnd = "번 고객 업무 완료" - + static let milliseconds: Double = 1000000 } +enum BusinessType { + case normal + + var neededTime: Double { + switch self { + case .normal: + return 0.7 + } + } +} + enum BankError: Error { case wrongInput case unknown diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift index d39898b8f..accf005e6 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift @@ -9,19 +9,17 @@ import Foundation final class Teller: OperationQueue { private var windowNumber: Int - private var needTimeToWork: Double private var isWorking: Bool = false var isNotWorking: Bool { return !isWorking } - init(windowNumber: Int, needTimeToWork: Double) { + init(windowNumber: Int) { self.windowNumber = windowNumber - self.needTimeToWork = needTimeToWork } - func handleBusiness(for client: Int) { - let timeToWork: UInt32 = UInt32(Bank.milliseconds * needTimeToWork) + func handleBusiness(for client: Client) { + let timeToWork: UInt32 = UInt32(Bank.milliseconds * client.businessType.neededTime) isWorking = true printStartBusiness(for: client) @@ -30,13 +28,13 @@ final class Teller: OperationQueue { isWorking = false } - private func printStartBusiness(for number: Int) { - let message = "\(windowNumber)" + Bank.tellerMessageMiddle + "\(number)" + Bank.tellerMessageStart + private func printStartBusiness(for client: Client) { + let message = "\(windowNumber)" + Bank.tellerMessageMiddle + "\(client.waitingNumber)" + Bank.tellerMessageStart print(message) } - private func printFinishBusiness(for number: Int) { - let message = "\(windowNumber)" + Bank.tellerMessageMiddle + "\(number)" + Bank.tellerMessageEnd + private func printFinishBusiness(for client: Client) { + let message = "\(windowNumber)" + Bank.tellerMessageMiddle + "\(client.waitingNumber)" + Bank.tellerMessageEnd print(message) } } diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/main.swift b/BankManagerConsoleApp/BankManagerConsoleApp/main.swift index 4876dca21..8158c766e 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/main.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/main.swift @@ -8,7 +8,7 @@ import Foundation func main() { let bank = BankManager() - let tellerNumber = 1 + let tellerNumber = 3 var isStart = true var clientNumber: Int { return Int.random(in: 10...30) From cb980e590ec51264344cd1b6df86bc287e266da3 Mon Sep 17 00:00:00 2001 From: lina0322 Date: Tue, 5 Jan 2021 21:37:48 +0900 Subject: [PATCH 22/43] =?UTF-8?q?Fix:=20=EC=97=85=EB=AC=B4=EC=8B=9C?= =?UTF-8?q?=EA=B0=84=EC=9D=84=20=EB=B6=84=EB=A6=AC=ED=95=98=EC=97=AC=20?= =?UTF-8?q?=EB=8F=8C=EC=95=84=EA=B0=88=20=EC=88=98=20=EC=9E=88=EB=8F=84?= =?UTF-8?q?=EB=A1=9D=20=EC=A0=84=EC=B2=B4=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BankManager.swift | 16 ++++++++-------- .../BankManagerConsoleApp/Teller.swift | 3 ++- .../BankManagerConsoleApp/main.swift | 7 +++---- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/BankManager.swift b/BankManager.swift index 1b439c852..3552ebb8b 100644 --- a/BankManager.swift +++ b/BankManager.swift @@ -7,12 +7,10 @@ import Foundation final class BankManager { + static let shared = BankManager() + var clients: [Client] = [] private var tellers: [Teller] = [] - private var clients: [Client] = [] - private var currentClientNumber = 0 - private var totalClientNumber: Int { - return clients.count - } + private var currentClientNumber = -1 private var businessTimes: Double { var sum: Double = 0 clients.forEach { client in @@ -21,6 +19,8 @@ final class BankManager { return sum } + private init() {} + func printMenu() { print(BankMenu.description, terminator: "") } @@ -51,13 +51,13 @@ final class BankManager { while `continue` { DispatchQueue.global().async { for teller in self.tellers { - if self.currentClientNumber > self.totalClientNumber { + if self.currentClientNumber >= self.clients.count - 1{ `continue` = false break } if teller.isNotWorking { - teller.handleBusiness(for: self.clients[self.currentClientNumber]) self.currentClientNumber += 1 + teller.handleBusiness(for: self.currentClientNumber) } } } @@ -66,7 +66,7 @@ final class BankManager { private func printCloseMessage() { let businessTimesText: String = String(format: "%.2f", businessTimes) - let message = Bank.closeMessageFront + "\(totalClientNumber)" + Bank.closeMessageMiddle + "\(businessTimesText)" + Bank.closeMessageEnd + let message = Bank.closeMessageFront + "\(clients.count)" + Bank.closeMessageMiddle + "\(businessTimesText)" + Bank.closeMessageEnd print(message) } diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift index accf005e6..b0fe678ba 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift @@ -18,7 +18,8 @@ final class Teller: OperationQueue { self.windowNumber = windowNumber } - func handleBusiness(for client: Client) { + func handleBusiness(for clientNumber: Int) { + let client = BankManager.shared.clients[clientNumber] let timeToWork: UInt32 = UInt32(Bank.milliseconds * client.businessType.neededTime) isWorking = true diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/main.swift b/BankManagerConsoleApp/BankManagerConsoleApp/main.swift index 8158c766e..3c4b8191d 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/main.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/main.swift @@ -7,15 +7,14 @@ import Foundation func main() { - let bank = BankManager() - let tellerNumber = 3 + let tellerNumber = 1 var isStart = true var clientNumber: Int { return Int.random(in: 10...30) } while isStart { - bank.printMenu() + BankManager.shared.printMenu() guard let input = readLine() else { print(BankError.wrongInput.description) @@ -24,7 +23,7 @@ func main() { switch input { case BankMenu.start.rawValue: - bank.operateBank(teller: tellerNumber, client: clientNumber) + BankManager.shared.operateBank(teller: tellerNumber, client: clientNumber) case BankMenu.end.rawValue: isStart = false default: From cbf56ec484ee79c7ad6a1d0f4f8b83d069ba7d59 Mon Sep 17 00:00:00 2001 From: lina0322 Date: Tue, 5 Jan 2021 21:47:42 +0900 Subject: [PATCH 23/43] =?UTF-8?q?Fix:=20=EB=8B=A4=EC=8B=9C=20=EC=8B=9C?= =?UTF-8?q?=EC=9E=91=ED=95=A0=EB=95=8C=20=EA=B3=A0=EA=B0=9D=20=EB=8C=80?= =?UTF-8?q?=EA=B8=B0=EB=B2=88=ED=98=B8=20=EC=88=AB=EC=9E=90=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 가끔 여러명이 동시에 작업을 시작하는 이슈 발생.. 아직 해결하지 못함 --- BankManager.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BankManager.swift b/BankManager.swift index 3552ebb8b..a117a23ab 100644 --- a/BankManager.swift +++ b/BankManager.swift @@ -73,6 +73,6 @@ final class BankManager { private func closeBank() { tellers.removeAll() clients.removeAll() - currentClientNumber = 0 + currentClientNumber = -1 } } From 21b8fb387efd7751b0895102a7e6e4c973c283ff Mon Sep 17 00:00:00 2001 From: lina0322 Date: Tue, 5 Jan 2021 22:02:41 +0900 Subject: [PATCH 24/43] Refactor: timeToWork -> needTimeToWork --- 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 b0fe678ba..79b03ada0 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift @@ -20,11 +20,11 @@ final class Teller: OperationQueue { func handleBusiness(for clientNumber: Int) { let client = BankManager.shared.clients[clientNumber] - let timeToWork: UInt32 = UInt32(Bank.milliseconds * client.businessType.neededTime) + let needTimeToWork: UInt32 = UInt32(Bank.milliseconds * client.businessType.neededTime) isWorking = true printStartBusiness(for: client) - usleep(timeToWork) + usleep(needTimeToWork) printFinishBusiness(for: client) isWorking = false } From 6905228ca6c2524f0a0f633483953682e9b62dcd Mon Sep 17 00:00:00 2001 From: lina0322 Date: Tue, 5 Jan 2021 22:10:13 +0900 Subject: [PATCH 25/43] =?UTF-8?q?Refactor:=20Bank=20enum=EC=9D=98=20String?= =?UTF-8?q?=ED=98=95=EC=8B=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BankManager.swift | 3 +-- BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift | 10 +++------- .../BankManagerConsoleApp/Teller.swift | 4 ++-- 3 files changed, 6 insertions(+), 11 deletions(-) diff --git a/BankManager.swift b/BankManager.swift index a117a23ab..1efcefa41 100644 --- a/BankManager.swift +++ b/BankManager.swift @@ -65,8 +65,7 @@ final class BankManager { } private func printCloseMessage() { - let businessTimesText: String = String(format: "%.2f", businessTimes) - let message = Bank.closeMessageFront + "\(clients.count)" + Bank.closeMessageMiddle + "\(businessTimesText)" + Bank.closeMessageEnd + let message = String(format: Bank.closeMessage, clients.count, businessTimes) print(message) } diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift index 07a31fafa..05ba95af3 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift @@ -15,13 +15,9 @@ enum BankMenu: String { } enum Bank { - static let closeMessageFront = "업무가 마감되었습니다. 오늘 업무를 처리한 고객은 총 " - static let closeMessageMiddle = "명이며, 총 업무시간은 " - static let closeMessageEnd = "초입니다." - - static let tellerMessageMiddle = "번 창구 : " - static let tellerMessageStart = "번 고객 업무 시작" - static let tellerMessageEnd = "번 고객 업무 완료" + static let closeMessage = "업무가 마감되었습니다. 오늘 업무를 처리한 고객은 총 %d명이며, 총 업무시간은 %.2f초입니다." + static let tellerStartMassage = "%d번 창구 : %d번 고객 업무 시작" + static let tellerFinishMessage = "%d번 창구 : %d번 고객 업무 완료" static let milliseconds: Double = 1000000 } diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift index 79b03ada0..3f690656c 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift @@ -30,12 +30,12 @@ final class Teller: OperationQueue { } private func printStartBusiness(for client: Client) { - let message = "\(windowNumber)" + Bank.tellerMessageMiddle + "\(client.waitingNumber)" + Bank.tellerMessageStart + let message = String(format: Bank.tellerStartMassage, windowNumber, client.waitingNumber) print(message) } private func printFinishBusiness(for client: Client) { - let message = "\(windowNumber)" + Bank.tellerMessageMiddle + "\(client.waitingNumber)" + Bank.tellerMessageEnd + let message = String(format: Bank.tellerFinishMessage, windowNumber, client.waitingNumber) print(message) } } From 7846c0a7790a285f0f0383641e5002dd842bd5ad Mon Sep 17 00:00:00 2001 From: lina0322 Date: Thu, 7 Jan 2021 09:46:50 +0900 Subject: [PATCH 26/43] Refactor: isStart -> continue --- BankManagerConsoleApp/BankManagerConsoleApp/main.swift | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/main.swift b/BankManagerConsoleApp/BankManagerConsoleApp/main.swift index 3c4b8191d..9a3774214 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/main.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/main.swift @@ -8,12 +8,12 @@ import Foundation func main() { let tellerNumber = 1 - var isStart = true + var `continue` = true var clientNumber: Int { return Int.random(in: 10...30) } - while isStart { + while `continue` { BankManager.shared.printMenu() guard let input = readLine() else { @@ -25,7 +25,7 @@ func main() { case BankMenu.start.rawValue: BankManager.shared.operateBank(teller: tellerNumber, client: clientNumber) case BankMenu.end.rawValue: - isStart = false + `continue` = false default: print(BankError.wrongInput.description) } From fa039f5fcec02e43a0e3a38a2c901ee63fa6dbf5 Mon Sep 17 00:00:00 2001 From: lina0322 Date: Thu, 7 Jan 2021 09:55:09 +0900 Subject: [PATCH 27/43] Remove: dispatchQueue and init currentClientNumber by zero --- BankManager.swift | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/BankManager.swift b/BankManager.swift index 1efcefa41..edc6794d0 100644 --- a/BankManager.swift +++ b/BankManager.swift @@ -10,7 +10,7 @@ final class BankManager { static let shared = BankManager() var clients: [Client] = [] private var tellers: [Teller] = [] - private var currentClientNumber = -1 + private var currentClientNumber = 0 private var businessTimes: Double { var sum: Double = 0 clients.forEach { client in @@ -49,16 +49,14 @@ final class BankManager { private func assignBusinessToTeller() { var `continue` = true while `continue` { - DispatchQueue.global().async { - for teller in self.tellers { - if self.currentClientNumber >= self.clients.count - 1{ - `continue` = false - break - } - if teller.isNotWorking { - self.currentClientNumber += 1 - teller.handleBusiness(for: self.currentClientNumber) - } + for teller in self.tellers { + if self.currentClientNumber >= self.clients.count - 1{ + `continue` = false + break + } + if teller.isNotWorking { + teller.handleBusiness(for: self.currentClientNumber) + self.currentClientNumber += 1 } } } @@ -72,6 +70,6 @@ final class BankManager { private func closeBank() { tellers.removeAll() clients.removeAll() - currentClientNumber = -1 + currentClientNumber = 0 } } From 47ee83b35bc834eb7f50bce1035c17a497bc1e63 Mon Sep 17 00:00:00 2001 From: lina0322 Date: Thu, 7 Jan 2021 09:56:20 +0900 Subject: [PATCH 28/43] =?UTF-8?q?Refactor:=20businessTimes=EC=97=90?= =?UTF-8?q?=EC=84=9C=20=EB=92=A4=20s=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BankManager.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/BankManager.swift b/BankManager.swift index edc6794d0..ae9aa108e 100644 --- a/BankManager.swift +++ b/BankManager.swift @@ -11,7 +11,7 @@ final class BankManager { var clients: [Client] = [] private var tellers: [Teller] = [] private var currentClientNumber = 0 - private var businessTimes: Double { + private var businessTime: Double { var sum: Double = 0 clients.forEach { client in sum += client.businessType.neededTime @@ -63,7 +63,7 @@ final class BankManager { } private func printCloseMessage() { - let message = String(format: Bank.closeMessage, clients.count, businessTimes) + let message = String(format: Bank.closeMessage, clients.count, businessTime) print(message) } From b3632e3e3edb075e8e7ced5ef58df59536281a24 Mon Sep 17 00:00:00 2001 From: lina0322 Date: Thu, 7 Jan 2021 10:40:05 +0900 Subject: [PATCH 29/43] Refactor: BankManager -> Bank --- BankManager.swift => Bank.swift | 4 ++-- .../BankManagerConsoleApp.xcodeproj/project.pbxproj | 8 ++++---- BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift | 2 +- BankManagerConsoleApp/BankManagerConsoleApp/main.swift | 4 ++-- 4 files changed, 9 insertions(+), 9 deletions(-) rename BankManager.swift => Bank.swift (96%) diff --git a/BankManager.swift b/Bank.swift similarity index 96% rename from BankManager.swift rename to Bank.swift index ae9aa108e..163fc4504 100644 --- a/BankManager.swift +++ b/Bank.swift @@ -6,8 +6,8 @@ import Foundation -final class BankManager { - static let shared = BankManager() +final class Bank { + static let shared = Bank() var clients: [Client] = [] private var tellers: [Teller] = [] private var currentClientNumber = 0 diff --git a/BankManagerConsoleApp/BankManagerConsoleApp.xcodeproj/project.pbxproj b/BankManagerConsoleApp/BankManagerConsoleApp.xcodeproj/project.pbxproj index fc6415477..70a54622e 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp.xcodeproj/project.pbxproj +++ b/BankManagerConsoleApp/BankManagerConsoleApp.xcodeproj/project.pbxproj @@ -11,7 +11,7 @@ 4CDDB11B25A422CD00EDC9CE /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CDDB11A25A422CD00EDC9CE /* Client.swift */; }; 4CDDB11E25A422EF00EDC9CE /* Enum.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CDDB11D25A422EF00EDC9CE /* Enum.swift */; }; C7694E7A259C3EC00053667F /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7694E79259C3EC00053667F /* main.swift */; }; - C7D65D1B259C8190005510E0 /* BankManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7D65D1A259C8190005510E0 /* BankManager.swift */; }; + C7D65D1B259C8190005510E0 /* Bank.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7D65D1A259C8190005510E0 /* Bank.swift */; }; /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -32,7 +32,7 @@ 4CDDB11D25A422EF00EDC9CE /* Enum.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Enum.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 /* BankManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = BankManager.swift; path = ../../BankManager.swift; sourceTree = ""; }; + C7D65D1A259C8190005510E0 /* Bank.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Bank.swift; path = ../../Bank.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -65,7 +65,7 @@ C7694E78259C3EC00053667F /* BankManagerConsoleApp */ = { isa = PBXGroup; children = ( - C7D65D1A259C8190005510E0 /* BankManager.swift */, + C7D65D1A259C8190005510E0 /* Bank.swift */, 4CDDB11725A422B700EDC9CE /* Teller.swift */, 4CDDB11A25A422CD00EDC9CE /* Client.swift */, 4CDDB11D25A422EF00EDC9CE /* Enum.swift */, @@ -132,7 +132,7 @@ buildActionMask = 2147483647; files = ( C7694E7A259C3EC00053667F /* main.swift in Sources */, - C7D65D1B259C8190005510E0 /* BankManager.swift in Sources */, + C7D65D1B259C8190005510E0 /* Bank.swift in Sources */, 4CDDB11E25A422EF00EDC9CE /* Enum.swift in Sources */, 4CDDB11B25A422CD00EDC9CE /* Client.swift in Sources */, 4CDDB11825A422B700EDC9CE /* Teller.swift in Sources */, diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift index 3f690656c..538309861 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift @@ -19,7 +19,7 @@ final class Teller: OperationQueue { } func handleBusiness(for clientNumber: Int) { - let client = BankManager.shared.clients[clientNumber] + let client = Bank.shared.clients[clientNumber] let needTimeToWork: UInt32 = UInt32(Bank.milliseconds * client.businessType.neededTime) isWorking = true diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/main.swift b/BankManagerConsoleApp/BankManagerConsoleApp/main.swift index 9a3774214..751e2378b 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/main.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/main.swift @@ -14,7 +14,7 @@ func main() { } while `continue` { - BankManager.shared.printMenu() + Bank.shared.printMenu() guard let input = readLine() else { print(BankError.wrongInput.description) @@ -23,7 +23,7 @@ func main() { switch input { case BankMenu.start.rawValue: - BankManager.shared.operateBank(teller: tellerNumber, client: clientNumber) + Bank.shared.operateBank(teller: tellerNumber, client: clientNumber) case BankMenu.end.rawValue: `continue` = false default: From 75f9ce3cc9eb2b16f51e85d8388f2bc5eb9819fd Mon Sep 17 00:00:00 2001 From: lina0322 Date: Thu, 7 Jan 2021 10:42:01 +0900 Subject: [PATCH 30/43] =?UTF-8?q?Refactor:=20Bank=20enum=EC=9D=98=20?= =?UTF-8?q?=EC=9D=B4=EB=A6=84=EC=9D=84=20BankConstant=EB=A1=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Bank.swift | 2 +- BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift | 2 +- BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Bank.swift b/Bank.swift index 163fc4504..508047472 100644 --- a/Bank.swift +++ b/Bank.swift @@ -63,7 +63,7 @@ final class Bank { } private func printCloseMessage() { - let message = String(format: Bank.closeMessage, clients.count, businessTime) + let message = String(format: BankConstant.closeMessage, clients.count, businessTime) print(message) } diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift index 05ba95af3..c664a19b4 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift @@ -14,7 +14,7 @@ enum BankMenu: String { static let description = "1: 은행 개점\n2: 종료\n입력 : " } -enum Bank { +enum BankConstant { static let closeMessage = "업무가 마감되었습니다. 오늘 업무를 처리한 고객은 총 %d명이며, 총 업무시간은 %.2f초입니다." static let tellerStartMassage = "%d번 창구 : %d번 고객 업무 시작" static let tellerFinishMessage = "%d번 창구 : %d번 고객 업무 완료" diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift index 538309861..67dc68b4d 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift @@ -20,7 +20,7 @@ final class Teller: OperationQueue { func handleBusiness(for clientNumber: Int) { let client = Bank.shared.clients[clientNumber] - let needTimeToWork: UInt32 = UInt32(Bank.milliseconds * client.businessType.neededTime) + let needTimeToWork: UInt32 = UInt32(BankConstant.milliseconds * client.businessType.neededTime) isWorking = true printStartBusiness(for: client) @@ -30,12 +30,12 @@ final class Teller: OperationQueue { } private func printStartBusiness(for client: Client) { - let message = String(format: Bank.tellerStartMassage, windowNumber, client.waitingNumber) + let message = String(format: BankConstant.tellerStartMassage, windowNumber, client.waitingNumber) print(message) } private func printFinishBusiness(for client: Client) { - let message = String(format: Bank.tellerFinishMessage, windowNumber, client.waitingNumber) + let message = String(format: BankConstant.tellerFinishMessage, windowNumber, client.waitingNumber) print(message) } } From a580a59334fd009b8c63d3e9eea1355e08ee5b06 Mon Sep 17 00:00:00 2001 From: lina0322 Date: Thu, 7 Jan 2021 10:45:53 +0900 Subject: [PATCH 31/43] =?UTF-8?q?Remove:=20Teller=EC=97=90=20=EC=9E=98?= =?UTF-8?q?=EB=AA=BB=EB=90=9C=20OperationQueue=20=EC=83=81=EC=86=8D=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/Enum.swift | 2 +- BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift index c664a19b4..8b8ab5a09 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift @@ -19,7 +19,7 @@ enum BankConstant { static let tellerStartMassage = "%d번 창구 : %d번 고객 업무 시작" static let tellerFinishMessage = "%d번 창구 : %d번 고객 업무 완료" - static let milliseconds: Double = 1000000 + static let milliseconds: Double = 1_000_000 } enum BusinessType { diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift index 67dc68b4d..c0ac46ea1 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift @@ -7,7 +7,7 @@ import Foundation -final class Teller: OperationQueue { +final class Teller { private var windowNumber: Int private var isWorking: Bool = false var isNotWorking: Bool { From b4a874225a39dcdcdbb45e2263c3df5bb702471f Mon Sep 17 00:00:00 2001 From: lina0322 Date: Thu, 7 Jan 2021 11:33:36 +0900 Subject: [PATCH 32/43] =?UTF-8?q?Refactor:=20Continue=20->=20isContinue?= =?UTF-8?q?=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 +++--- BankManagerConsoleApp/BankManagerConsoleApp/main.swift | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Bank.swift b/Bank.swift index 508047472..8b0667699 100644 --- a/Bank.swift +++ b/Bank.swift @@ -47,11 +47,11 @@ final class Bank { } private func assignBusinessToTeller() { - var `continue` = true - while `continue` { + var isContinue = true + while isContinue { for teller in self.tellers { if self.currentClientNumber >= self.clients.count - 1{ - `continue` = false + isContinue = false break } if teller.isNotWorking { diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/main.swift b/BankManagerConsoleApp/BankManagerConsoleApp/main.swift index 751e2378b..ce57752bf 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/main.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/main.swift @@ -8,12 +8,12 @@ import Foundation func main() { let tellerNumber = 1 - var `continue` = true + var isContinue = true var clientNumber: Int { return Int.random(in: 10...30) } - while `continue` { + while isContinue { Bank.shared.printMenu() guard let input = readLine() else { @@ -25,7 +25,7 @@ func main() { case BankMenu.start.rawValue: Bank.shared.operateBank(teller: tellerNumber, client: clientNumber) case BankMenu.end.rawValue: - `continue` = false + isContinue = false default: print(BankError.wrongInput.description) } From 8e16775e3aaeb39019cfdaf3b64ce815600c92f2 Mon Sep 17 00:00:00 2001 From: lina0322 Date: Thu, 7 Jan 2021 19:44:35 +0900 Subject: [PATCH 33/43] =?UTF-8?q?Refactor:=20=EC=8B=9C=EA=B0=84=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=20Double=ED=83=80=EC=9E=85=EB=93=A4=20TimeInterval?= =?UTF-8?q?=ED=83=80=EC=9E=85=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 --- Bank.swift | 4 ++-- BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Bank.swift b/Bank.swift index 8b0667699..68a80e82b 100644 --- a/Bank.swift +++ b/Bank.swift @@ -11,8 +11,8 @@ final class Bank { var clients: [Client] = [] private var tellers: [Teller] = [] private var currentClientNumber = 0 - private var businessTime: Double { - var sum: Double = 0 + private var businessTime: TimeInterval { + var sum: TimeInterval = 0 clients.forEach { client in sum += client.businessType.neededTime } diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift index 8b8ab5a09..8d7e8896a 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift @@ -19,13 +19,13 @@ enum BankConstant { static let tellerStartMassage = "%d번 창구 : %d번 고객 업무 시작" static let tellerFinishMessage = "%d번 창구 : %d번 고객 업무 완료" - static let milliseconds: Double = 1_000_000 + static let milliseconds: TimeInterval = 1_000_000 } enum BusinessType { case normal - var neededTime: Double { + var neededTime: TimeInterval { switch self { case .normal: return 0.7 From 7b6f96ffce78e0a51ab5019406ee8e741c3304da Mon Sep 17 00:00:00 2001 From: lina0322 Date: Thu, 7 Jan 2021 19:51:36 +0900 Subject: [PATCH 34/43] =?UTF-8?q?Refactor:=20usleep=EC=9D=84=20Thread.slee?= =?UTF-8?q?p=EC=9C=BC=EB=A1=9C=20=EB=B3=80=EA=B2=BD=20=ED=9B=84=20millisec?= =?UTF-8?q?onds=EB=A5=BC=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/Enum.swift | 2 -- BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift | 4 ++-- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/Bank.swift b/Bank.swift index 68a80e82b..da4997bea 100644 --- a/Bank.swift +++ b/Bank.swift @@ -50,7 +50,7 @@ final class Bank { var isContinue = true while isContinue { for teller in self.tellers { - if self.currentClientNumber >= self.clients.count - 1{ + if self.currentClientNumber > self.clients.count - 1{ isContinue = false break } diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift index 8d7e8896a..7ba2e0c12 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift @@ -18,8 +18,6 @@ enum BankConstant { static let closeMessage = "업무가 마감되었습니다. 오늘 업무를 처리한 고객은 총 %d명이며, 총 업무시간은 %.2f초입니다." static let tellerStartMassage = "%d번 창구 : %d번 고객 업무 시작" static let tellerFinishMessage = "%d번 창구 : %d번 고객 업무 완료" - - static let milliseconds: TimeInterval = 1_000_000 } enum BusinessType { diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift index c0ac46ea1..50854a9de 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift @@ -20,11 +20,11 @@ final class Teller { func handleBusiness(for clientNumber: Int) { let client = Bank.shared.clients[clientNumber] - let needTimeToWork: UInt32 = UInt32(BankConstant.milliseconds * client.businessType.neededTime) + let needTimeToWork = client.businessType.neededTime isWorking = true printStartBusiness(for: client) - usleep(needTimeToWork) + Thread.sleep(forTimeInterval: needTimeToWork) printFinishBusiness(for: client) isWorking = false } From e41d9f55c0e2c25d6bb62f4cf7b9ff7ef02b30f3 Mon Sep 17 00:00:00 2001 From: lina0322 Date: Thu, 7 Jan 2021 20:52:28 +0900 Subject: [PATCH 35/43] =?UTF-8?q?Feat:=20command=20=EB=B3=80=EC=88=98=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20in=20main?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BankManagerConsoleApp/BankManagerConsoleApp/main.swift | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/main.swift b/BankManagerConsoleApp/BankManagerConsoleApp/main.swift index ce57752bf..cabe161ec 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/main.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/main.swift @@ -16,15 +16,15 @@ func main() { while isContinue { Bank.shared.printMenu() - guard let input = readLine() else { + guard let input = readLine(), let command = BankMenu(rawValue: input) else { print(BankError.wrongInput.description) continue } - switch input { - case BankMenu.start.rawValue: + switch command { + case .start: Bank.shared.operateBank(teller: tellerNumber, client: clientNumber) - case BankMenu.end.rawValue: + case .end: isContinue = false default: print(BankError.wrongInput.description) From aa67164ad4ba7d79b5df0614b0b33e27f60e90a1 Mon Sep 17 00:00:00 2001 From: lina0322 Date: Thu, 7 Jan 2021 20:56:19 +0900 Subject: [PATCH 36/43] =?UTF-8?q?Refactor:=20BankMenu.description=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Bank.swift | 2 +- BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/Bank.swift b/Bank.swift index da4997bea..a391117e7 100644 --- a/Bank.swift +++ b/Bank.swift @@ -22,7 +22,7 @@ final class Bank { private init() {} func printMenu() { - print(BankMenu.description, terminator: "") + print(BankMenu.description, terminator: " ") } func operateBank(teller: Int, client: Int) { diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift index 7ba2e0c12..b6a9d4dd2 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift @@ -11,7 +11,11 @@ enum BankMenu: String { case start = "1" case end = "2" - static let description = "1: 은행 개점\n2: 종료\n입력 : " + static let description = """ + 1: 은행 개점 + 2: 종료 + 입력 : + """ } enum BankConstant { From 70b78e58e5b85e5b4a1e8b5632220d8f9cad4385 Mon Sep 17 00:00:00 2001 From: lina0322 Date: Thu, 7 Jan 2021 22:40:26 +0900 Subject: [PATCH 37/43] =?UTF-8?q?Remove:=20main=EC=9D=98=20while=EC=95=88?= =?UTF-8?q?=EC=97=90=20switch=EC=97=90=EC=84=9C=20default=20=EC=A0=9C?= =?UTF-8?q?=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, 2 deletions(-) diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/main.swift b/BankManagerConsoleApp/BankManagerConsoleApp/main.swift index cabe161ec..6620a16c0 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/main.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/main.swift @@ -26,8 +26,6 @@ func main() { Bank.shared.operateBank(teller: tellerNumber, client: clientNumber) case .end: isContinue = false - default: - print(BankError.wrongInput.description) } } } From e36ce75fc381510eab93dfe12bd25c0227d37570 Mon Sep 17 00:00:00 2001 From: lina0322 Date: Thu, 7 Jan 2021 23:22:18 +0900 Subject: [PATCH 38/43] =?UTF-8?q?Feat:=20dispatchQueue=20=EC=A0=81?= =?UTF-8?q?=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Bank.swift | 40 ++++++++++--------- .../BankManagerConsoleApp/Teller.swift | 7 +++- .../BankManagerConsoleApp/main.swift | 9 +++-- 3 files changed, 31 insertions(+), 25 deletions(-) diff --git a/Bank.swift b/Bank.swift index a391117e7..3f8834141 100644 --- a/Bank.swift +++ b/Bank.swift @@ -7,29 +7,24 @@ import Foundation final class Bank { - static let shared = Bank() - var clients: [Client] = [] + private var clients: [Client] = [] private var tellers: [Teller] = [] - private var currentClientNumber = 0 - private var businessTime: TimeInterval { - var sum: TimeInterval = 0 - clients.forEach { client in - sum += client.businessType.neededTime - } - return sum - } - - private init() {} - + private var finishedClientNumber = 0 + private var businessTime: TimeInterval? + func printMenu() { print(BankMenu.description, terminator: " ") } func operateBank(teller: Int, client: Int) { + var openTime = Date() + + openTime = Date() initTellerNumber(teller) initClientNumber(client) assignBusinessToTeller() - sleep(1) + sleep(10) + businessTime = Date().timeIntervalSince(openTime) printCloseMessage() closeBank() } @@ -50,26 +45,33 @@ final class Bank { var isContinue = true while isContinue { for teller in self.tellers { - if self.currentClientNumber > self.clients.count - 1{ + if self.clients.count == 0 { isContinue = false break } if teller.isNotWorking { - teller.handleBusiness(for: self.currentClientNumber) - self.currentClientNumber += 1 + let client = clients.removeFirst() + teller.workingQueue.async { + teller.handleBusiness(for: client) + } + self.finishedClientNumber += 1 } } } } private func printCloseMessage() { - let message = String(format: BankConstant.closeMessage, clients.count, businessTime) + guard let businessTime = businessTime else { + print(BankError.unknown.description) + return + } + let message = String(format: BankConstant.closeMessage, finishedClientNumber, businessTime) print(message) } private func closeBank() { tellers.removeAll() clients.removeAll() - currentClientNumber = 0 + finishedClientNumber = 0 } } diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift index 50854a9de..86c65e2c6 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift @@ -9,6 +9,8 @@ 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 @@ -16,15 +18,16 @@ final class Teller { init(windowNumber: Int) { self.windowNumber = windowNumber + workingQueue = DispatchQueue(label: "\(windowNumber)") } - func handleBusiness(for clientNumber: Int) { - let client = Bank.shared.clients[clientNumber] + func handleBusiness(for client: Client) { let needTimeToWork = client.businessType.neededTime isWorking = true printStartBusiness(for: client) Thread.sleep(forTimeInterval: needTimeToWork) + workingHours += needTimeToWork printFinishBusiness(for: client) isWorking = false } diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/main.swift b/BankManagerConsoleApp/BankManagerConsoleApp/main.swift index 6620a16c0..950eb42c9 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/main.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/main.swift @@ -6,15 +6,16 @@ import Foundation -func main() { - let tellerNumber = 1 +private func main() { + let bank = Bank() + let tellerNumber = 2 var isContinue = true var clientNumber: Int { return Int.random(in: 10...30) } while isContinue { - Bank.shared.printMenu() + bank.printMenu() guard let input = readLine(), let command = BankMenu(rawValue: input) else { print(BankError.wrongInput.description) @@ -23,7 +24,7 @@ func main() { switch command { case .start: - Bank.shared.operateBank(teller: tellerNumber, client: clientNumber) + bank.operateBank(teller: tellerNumber, client: clientNumber) case .end: isContinue = false } From 6e35198d4a49df9891a0753232bbc269d21828bb Mon Sep 17 00:00:00 2001 From: lina0322 Date: Thu, 7 Jan 2021 23:32:41 +0900 Subject: [PATCH 39/43] =?UTF-8?q?Feat:=20semaphore=EC=9D=84=20=EC=82=AC?= =?UTF-8?q?=EC=9A=A9=ED=95=98=EC=97=AC=20=ED=81=B4=EB=A1=9C=EC=A6=88=20?= =?UTF-8?q?=EB=A9=98=ED=8A=B8=20=EC=8B=9C=EA=B0=84=20=EC=A1=B0=EC=A0=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Bank.swift | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Bank.swift b/Bank.swift index 3f8834141..988162aa2 100644 --- a/Bank.swift +++ b/Bank.swift @@ -23,7 +23,6 @@ final class Bank { initTellerNumber(teller) initClientNumber(client) assignBusinessToTeller() - sleep(10) businessTime = Date().timeIntervalSince(openTime) printCloseMessage() closeBank() @@ -42,7 +41,9 @@ final class Bank { } private func assignBusinessToTeller() { + let semaphore = DispatchSemaphore(value: 0) var isContinue = true + while isContinue { for teller in self.tellers { if self.clients.count == 0 { @@ -53,11 +54,13 @@ final class Bank { let client = clients.removeFirst() teller.workingQueue.async { teller.handleBusiness(for: client) + semaphore.signal() } self.finishedClientNumber += 1 } } } + for _ in 0.. Date: Thu, 7 Jan 2021 23:38:59 +0900 Subject: [PATCH 40/43] =?UTF-8?q?Fix:=20=EC=9D=80=ED=96=89=EC=9B=90=201?= =?UTF-8?q?=EB=AA=85=EC=9C=BC=EB=A1=9C=20=EC=88=98=EC=A0=95?= 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 950eb42c9..1a536ec26 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/main.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/main.swift @@ -8,7 +8,7 @@ import Foundation private func main() { let bank = Bank() - let tellerNumber = 2 + let tellerNumber = 1 var isContinue = true var clientNumber: Int { return Int.random(in: 10...30) From c1152f984ce952b67400cd9947cf6ffbccfe8efa Mon Sep 17 00:00:00 2001 From: lina0322 Date: Sat, 9 Jan 2021 16:28:51 +0900 Subject: [PATCH 41/43] =?UTF-8?q?Refactor:=20initClient=EB=A5=BC=20main?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Bank.swift | 14 ++++---------- .../BankManagerConsoleApp/main.swift | 14 ++++++++++++-- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/Bank.swift b/Bank.swift index 988162aa2..db87a3830 100644 --- a/Bank.swift +++ b/Bank.swift @@ -16,30 +16,24 @@ final class Bank { print(BankMenu.description, terminator: " ") } - func operateBank(teller: Int, client: Int) { + func operateBank(teller: Int, client: [Client]) { var openTime = Date() openTime = Date() - initTellerNumber(teller) - initClientNumber(client) + clients = client + initTellers(teller) assignBusinessToTeller() businessTime = Date().timeIntervalSince(openTime) printCloseMessage() closeBank() } - private func initTellerNumber(_ number: Int) { + private func initTellers(_ number: Int) { for windowNumber in 1...number { tellers.append(Teller(windowNumber: windowNumber)) } } - private func initClientNumber(_ number: Int) { - for waitingNumber in 1...number { - clients.append(Client(waitingNumber: waitingNumber)) - } - } - private func assignBusinessToTeller() { let semaphore = DispatchSemaphore(value: 0) var isContinue = true diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/main.swift b/BankManagerConsoleApp/BankManagerConsoleApp/main.swift index 1a536ec26..882cae38d 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/main.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/main.swift @@ -10,10 +10,19 @@ private func main() { let bank = Bank() let tellerNumber = 1 var isContinue = true - var clientNumber: Int { + var randomNumber: Int { return Int.random(in: 10...30) } + func initClients(_ number: Int) -> [Client] { + var clients: [Client] = [] + + for waitingNumber in 1...number { + clients.append(Client(waitingNumber: waitingNumber)) + } + return clients + } + while isContinue { bank.printMenu() @@ -24,7 +33,8 @@ private func main() { switch command { case .start: - bank.operateBank(teller: tellerNumber, client: clientNumber) + let clients = initClients(randomNumber) + bank.operateBank(teller: tellerNumber, client: clients) case .end: isContinue = false } From 6e70425ac5fad9b6a188c4dee4702ee8b5d52cde Mon Sep 17 00:00:00 2001 From: lina0322 Date: Sat, 9 Jan 2021 17:30:37 +0900 Subject: [PATCH 42/43] =?UTF-8?q?Feat:=20=EC=B6=9C=EB=A0=A5=EB=AC=B8?= =?UTF-8?q?=EC=9D=84=20DashBoard=EC=97=90=EC=84=9C=20=EA=B4=80=EB=A6=AC?= =?UTF-8?q?=ED=95=98=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Bank.swift | 11 +-------- .../project.pbxproj | 4 ++++ .../BankManagerConsoleApp/Dashboard.swift | 24 +++++++++++++++++++ .../BankManagerConsoleApp/Enum.swift | 8 +++---- .../BankManagerConsoleApp/Teller.swift | 14 ++--------- 5 files changed, 35 insertions(+), 26 deletions(-) create mode 100644 BankManagerConsoleApp/BankManagerConsoleApp/Dashboard.swift diff --git a/Bank.swift b/Bank.swift index db87a3830..151df70d4 100644 --- a/Bank.swift +++ b/Bank.swift @@ -24,7 +24,7 @@ final class Bank { initTellers(teller) assignBusinessToTeller() businessTime = Date().timeIntervalSince(openTime) - printCloseMessage() + Dashboard.printCloseMessage(finishedClientNumber, businessTime) closeBank() } @@ -57,15 +57,6 @@ final class Bank { for _ in 0.. Date: Sat, 9 Jan 2021 21:52:24 +0900 Subject: [PATCH 43/43] =?UTF-8?q?Refactor:=20main=ED=95=A8=EC=88=98=20?= =?UTF-8?q?=EB=82=B4=EB=B6=80=EC=97=90=20=EB=B0=98=EB=B3=B5=EB=90=98?= =?UTF-8?q?=EB=8A=94=20=ED=95=A8=EC=88=98=20=EB=B0=96=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EA=BA=BC=EB=83=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Bank.swift | 11 +++----- .../BankManagerConsoleApp/Dashboard.swift | 4 +++ .../BankManagerConsoleApp/Enum.swift | 2 +- .../BankManagerConsoleApp/Teller.swift | 2 -- .../BankManagerConsoleApp/main.swift | 26 ++++++++++++++----- 5 files changed, 27 insertions(+), 18 deletions(-) diff --git a/Bank.swift b/Bank.swift index 151df70d4..48883ea23 100644 --- a/Bank.swift +++ b/Bank.swift @@ -11,17 +11,12 @@ final class Bank { private var tellers: [Teller] = [] private var finishedClientNumber = 0 private var businessTime: TimeInterval? - - func printMenu() { - print(BankMenu.description, terminator: " ") - } - + func operateBank(teller: Int, client: [Client]) { - var openTime = Date() + let openTime = Date() - openTime = Date() - clients = client initTellers(teller) + clients = client assignBusinessToTeller() businessTime = Date().timeIntervalSince(openTime) Dashboard.printCloseMessage(finishedClientNumber, businessTime) diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Dashboard.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Dashboard.swift index f8a305ffa..22cc1a396 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Dashboard.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Dashboard.swift @@ -8,6 +8,10 @@ import Foundation class Dashboard { + static func printMenu() { + print(Menu.description, terminator: " ") + } + static func printStatus(for client: Client, about message: Message) { let message = String(format: message.rawValue, client.waitingNumber) print(message) diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift index 0b9cc4502..3dc67ee44 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift @@ -7,7 +7,7 @@ import Foundation -enum BankMenu: String { +enum Menu: String { case start = "1" case end = "2" 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 } diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/main.swift b/BankManagerConsoleApp/BankManagerConsoleApp/main.swift index 882cae38d..80d6c8f7c 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/main.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/main.swift @@ -6,13 +6,25 @@ import Foundation +private func randomNumber(from minNumber: Int = 0, to maxNumber: Int) -> Int { + return Int.random(in: minNumber...maxNumber) +} + +private func initClients(_ number: Int) -> [Client]? { + var clients: [Client] = [] + + for waitingNumber in 1...number { + clients.append(Client(waitingNumber: waitingNumber)) + } + return clients +} + private func main() { let bank = Bank() - let tellerNumber = 1 + let tellerNumber = 3 + let maxClientNumber = 30 + let minClientNumber = 10 var isContinue = true - var randomNumber: Int { - return Int.random(in: 10...30) - } func initClients(_ number: Int) -> [Client] { var clients: [Client] = [] @@ -24,16 +36,16 @@ private func main() { } while isContinue { - bank.printMenu() + Dashboard.printMenu() - guard let input = readLine(), let command = BankMenu(rawValue: input) else { + guard let input = readLine(), let command = Menu(rawValue: input) else { print(BankError.wrongInput.description) continue } switch command { case .start: - let clients = initClients(randomNumber) + let clients = initClients(randomNumber(from: minClientNumber, to: maxClientNumber)) bank.operateBank(teller: tellerNumber, client: clients) case .end: isContinue = false