From cddcec21d675a0adacc3cd01c73519447ed9b0be Mon Sep 17 00:00:00 2001 From: lina0322 Date: Fri, 8 Jan 2021 00:13:56 +0900 Subject: [PATCH 01/16] =?UTF-8?q?Feat:=20Client=EC=97=90=20Priority?= =?UTF-8?q?=EC=B6=94=EA=B0=80=EC=99=80=20Business=20Type=EC=97=90=20loan?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20=EB=93=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BankManagerConsoleApp/Client.swift | 21 ++++++++++++++++++- .../BankManagerConsoleApp/Enum.swift | 20 ++++++++++++++---- .../BankManagerConsoleApp/Teller.swift | 4 ++-- .../BankManagerConsoleApp/main.swift | 2 +- 4 files changed, 39 insertions(+), 8 deletions(-) diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Client.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Client.swift index a38ee05cb..e80b79ded 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Client.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Client.swift @@ -8,11 +8,30 @@ import Foundation final class Client { + enum Priority: Int { + case first = 0 + case second + case third + + var description: String { + switch self { + case .first: + return "VVIP" + case .second: + return "VIP" + case .third: + return "일반" + } + } + } + let waitingNumber: Int let businessType: BusinessType + let priority: Priority - init(waitingNumber: Int, businessType: BusinessType = .normal) { + init(waitingNumber: Int, businessType: BusinessType = .deposit, priority: Priority = .third) { self.waitingNumber = waitingNumber self.businessType = businessType + self.priority = priority } } diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift index b6a9d4dd2..aa8ab1590 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift @@ -20,17 +20,29 @@ enum BankMenu: String { enum BankConstant { static let closeMessage = "업무가 마감되었습니다. 오늘 업무를 처리한 고객은 총 %d명이며, 총 업무시간은 %.2f초입니다." - static let tellerStartMassage = "%d번 창구 : %d번 고객 업무 시작" - static let tellerFinishMessage = "%d번 창구 : %d번 고객 업무 완료" + static let tellerStartMassage = "%d번 창구: %d번 %@고객 %@업무 시작" + static let tellerFinishMessage = "%d번 창구: %d번 %@고객 %@업무 완료" } enum BusinessType { - case normal + case deposit + case loan var neededTime: TimeInterval { switch self { - case .normal: + case .deposit: return 0.7 + case .loan: + return 1.1 + } + } + + var description: String { + switch self { + case .deposit: + return "예금" + case .loan: + return "대출" } } } diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift index 86c65e2c6..42bf8a63f 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift @@ -33,12 +33,12 @@ final class Teller { } private func printStartBusiness(for client: Client) { - let message = String(format: BankConstant.tellerStartMassage, windowNumber, client.waitingNumber) + let message = String(format: BankConstant.tellerStartMassage, windowNumber, client.waitingNumber, client.priority.description, client.priority.description) print(message) } private func printFinishBusiness(for client: Client) { - let message = String(format: BankConstant.tellerFinishMessage, windowNumber, client.waitingNumber) + let message = String(format: BankConstant.tellerFinishMessage, windowNumber, client.waitingNumber, client.priority.description, client.priority.description) print(message) } } diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/main.swift b/BankManagerConsoleApp/BankManagerConsoleApp/main.swift index 1a536ec26..761c86730 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 = 1 + let tellerNumber = 3 var isContinue = true var clientNumber: Int { return Int.random(in: 10...30) From a2e1d67ae15e205a1f12a2f7a2e90607c8aefb77 Mon Sep 17 00:00:00 2001 From: lina0322 Date: Fri, 8 Jan 2021 00:25:55 +0900 Subject: [PATCH 02/16] =?UTF-8?q?Feat:=20Client=EC=9D=98=20=EB=93=B1?= =?UTF-8?q?=EA=B8=89=EA=B3=BC=20=EC=97=85=EB=AC=B4=EB=A5=BC=20=EB=9E=9C?= =?UTF-8?q?=EB=8D=A4=ED=95=98=EA=B2=8C=20=EC=B4=88=EA=B8=B0=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Bank.swift | 10 +++++++++- .../BankManagerConsoleApp/Client.swift | 2 +- BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift | 4 ++-- .../BankManagerConsoleApp/Teller.swift | 4 ++-- 4 files changed, 14 insertions(+), 6 deletions(-) diff --git a/Bank.swift b/Bank.swift index 988162aa2..5f9cbffc1 100644 --- a/Bank.swift +++ b/Bank.swift @@ -35,8 +35,16 @@ final class Bank { } private func initClientNumber(_ number: Int) { + func randomNumber(maxNumber: Int) -> Int { + return Int.random(in: 0.. Date: Fri, 8 Jan 2021 01:06:20 +0900 Subject: [PATCH 03/16] =?UTF-8?q?Feat:=20sortClientByPriority=EB=A1=9C=20?= =?UTF-8?q?=EC=9A=B0=EC=84=A0=EC=88=9C=EC=9C=84=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Bank.swift | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Bank.swift b/Bank.swift index 5f9cbffc1..22d0ec694 100644 --- a/Bank.swift +++ b/Bank.swift @@ -22,6 +22,8 @@ final class Bank { openTime = Date() initTellerNumber(teller) initClientNumber(client) + sortClientByPriority() + dump(clients) assignBusinessToTeller() businessTime = Date().timeIntervalSince(openTime) printCloseMessage() @@ -48,6 +50,14 @@ final class Bank { } } + private func sortClientByPriority() { + let firstGroup: [Client] = clients.filter({ $0.priority == .first}) + let secondGroup: [Client] = clients.filter({ $0.priority == .second}) + let thirdGroup: [Client] = clients.filter({ $0.priority == .third}) + + clients = firstGroup + secondGroup + thirdGroup + } + private func assignBusinessToTeller() { let semaphore = DispatchSemaphore(value: 0) var isContinue = true From 1469445655066d05172db6789baf8f664a5e54d3 Mon Sep 17 00:00:00 2001 From: lina0322 Date: Sat, 9 Jan 2021 16:52:46 +0900 Subject: [PATCH 04/16] =?UTF-8?q?Refactor:=20main=ED=95=A8=EC=88=98=20?= =?UTF-8?q?=EC=95=88=EC=97=90=20=EB=B0=98=EB=B3=B5=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=EB=90=98=EB=8A=94=20=ED=95=A8=EC=88=98=EB=93=A4=20=EB=B0=96?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EA=BA=BC=EB=83=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BankManagerConsoleApp/main.swift | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/main.swift b/BankManagerConsoleApp/BankManagerConsoleApp/main.swift index 21ae0e5c1..76575bfcd 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/main.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/main.swift @@ -6,6 +6,23 @@ 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 { + guard let businessType = BusinessType(rawValue: randomNumber(to: BusinessType.allCases.count - 1)), let priority = Client.Priority(rawValue: randomNumber(to: Client.Priority.allCases.count - 1)) else { + return nil + } + + clients.append(Client(waitingNumber: waitingNumber, businessType: businessType, priority: priority)) + } + return clients +} + private func main() { let bank = Bank() let tellerNumber = 3 @@ -13,23 +30,6 @@ private func main() { let minClientNumber = 10 var isContinue = true - func randomNumber(from minNumber: Int = 0, to maxNumber: Int) -> Int { - return Int.random(in: minNumber...maxNumber) - } - - 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 { - return nil - } - - clients.append(Client(waitingNumber: waitingNumber, businessType: businessType, priority: priority)) - } - return clients - } - while isContinue { bank.printMenu() From 731cdc87f8dc55580d78aaa6477349e95178e822 Mon Sep 17 00:00:00 2001 From: lina0322 Date: Sat, 9 Jan 2021 17:47:34 +0900 Subject: [PATCH 05/16] 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 e29cbf7c7d2ff90923c9ba5441a98304abf439dc Mon Sep 17 00:00:00 2001 From: lina0322 Date: Sat, 9 Jan 2021 19:34:49 +0900 Subject: [PATCH 06/16] =?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 7f90efabd..66ce4a70d 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift @@ -25,7 +25,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 f352b0f2a1eeea909a2dd76b2843ac2b0c368eae Mon Sep 17 00:00:00 2001 From: lina0322 Date: Sat, 9 Jan 2021 19:57:01 +0900 Subject: [PATCH 07/16] =?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 --- Bank.swift | 34 ++----------------- .../BankManagerConsoleApp/Client.swift | 12 ++++++- .../BankManagerConsoleApp/Dashboard.swift | 4 +++ .../BankManagerConsoleApp/Enum.swift | 2 +- .../BankManagerConsoleApp/Teller.swift | 4 +-- .../BankManagerConsoleApp/main.swift | 4 +-- 6 files changed, 22 insertions(+), 38 deletions(-) diff --git a/Bank.swift b/Bank.swift index ce582d34a..b37340959 100644 --- a/Bank.swift +++ b/Bank.swift @@ -12,17 +12,11 @@ final class Bank { 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 - sortClientByPriority() initTellers(teller) + clients = client.sorted() assignBusinessToTeller() businessTime = Date().timeIntervalSince(openTime) Dashboard.printCloseMessage(finishedClientNumber, businessTime) @@ -35,28 +29,6 @@ final class Bank { } } - private func initClientNumber(_ number: Int) { - func randomNumber(maxNumber: Int) -> Int { - return Int.random(in: 0.. Bool { + return lhs.priority < rhs.priority + } + + static func == (lhs: Client, rhs: Client) -> Bool { + return lhs.priority == rhs.priority + } +} diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Dashboard.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Dashboard.swift index 8c356cf41..548f840df 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, client.priority.description, client.businessType.description) print(message) diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift index 66ce4a70d..e931d75e0 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 4dd014a10..fd12ffc21 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift @@ -21,11 +21,9 @@ final class Teller { } func handleBusiness(for client: Client) { - let needTimeToWork = client.businessType.neededTime - isWorking = true Dashboard.printStatus(for: client, about: .tellerStart) - Thread.sleep(forTimeInterval: needTimeToWork) + Thread.sleep(forTimeInterval: client.businessType.neededTime) Dashboard.printStatus(for: client, about: .tellerFinish) isWorking = false } diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/main.swift b/BankManagerConsoleApp/BankManagerConsoleApp/main.swift index 09496f1e3..6200659a3 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/main.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/main.swift @@ -31,9 +31,9 @@ private func main() { var isContinue = true 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 } From ec2f607592103d9c2b0918ed9b4ef1cd6bef89c3 Mon Sep 17 00:00:00 2001 From: lina0322 Date: Sat, 9 Jan 2021 20:03:41 +0900 Subject: [PATCH 08/16] =?UTF-8?q?Refactor:=20Priority=20case=20=EB=84=A4?= =?UTF-8?q?=EC=9D=B4=EB=B0=8D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BankManagerConsoleApp/Client.swift | 14 +++++++------- .../BankManagerConsoleApp/Enum.swift | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) 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/Enum.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift index e931d75e0..f575249b2 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift @@ -24,7 +24,7 @@ enum Message: String { case tellerFinish = "%d번 %@고객 %@업무 완료" } -enum BusinessType: Int, CaseIterable { +enum BusinessType: CaseIterable { case deposit case loan From c156f4af2232fcdecf9f2c69f0c537063a23e295 Mon Sep 17 00:00:00 2001 From: lina0322 Date: Sun, 10 Jan 2021 09:24:55 +0900 Subject: [PATCH 09/16] =?UTF-8?q?Refactor:=20step1=20=EB=A6=AC=EB=B7=B0?= =?UTF-8?q?=EA=B4=80=EB=A0=A8=20=EC=B6=94=EA=B0=80=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BankManagerConsoleApp/Dashboard.swift | 8 ++--- .../BankManagerConsoleApp/Enum.swift | 8 ++--- .../BankManagerConsoleApp/Teller.swift | 4 +-- .../BankManagerConsoleApp/main.swift | 34 +++++++++---------- 4 files changed, 27 insertions(+), 27 deletions(-) diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Dashboard.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Dashboard.swift index 81efe7f01..762607204 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Dashboard.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Dashboard.swift @@ -7,13 +7,13 @@ import Foundation -class Dashboard { +struct 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, client.priority.description, client.businessType.description) + static func printStatus(for client: Client, about message: String) { + let message = String(format: message, client.waitingNumber, client.priority.description, client.businessType.description) print(message) } @@ -22,7 +22,7 @@ class Dashboard { print(BankError.unknown.description) return } - let message = String(format: Message.close.rawValue, number, time) + let message = String(format: Message.close, number, time) print(message) } } diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift index f575249b2..0af13b57e 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift @@ -18,10 +18,10 @@ enum Menu: String { """ } -enum Message: String { - case close = "업무가 마감되었습니다. 오늘 업무를 처리한 고객은 총 %d명이며, 총 업무시간은 %.2f초입니다." - case tellerStart = "%d번 %@고객 %@업무 시작" - case tellerFinish = "%d번 %@고객 %@업무 완료" +enum Message { + static let close = "업무가 마감되었습니다. 오늘 업무를 처리한 고객은 총 %d명이며, 총 업무시간은 %.2f초입니다." + static let tellerStart = "%d번 %@고객 %@업무 시작" + static let tellerFinish = "%d번 %@고객 %@업무 완료" } enum BusinessType: CaseIterable { diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift index fd12ffc21..f67879614 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Teller.swift @@ -22,9 +22,9 @@ final class Teller { func handleBusiness(for client: Client) { isWorking = true - Dashboard.printStatus(for: client, about: .tellerStart) + Dashboard.printStatus(for: client, about: Message.tellerStart) Thread.sleep(forTimeInterval: client.businessType.neededTime) - Dashboard.printStatus(for: client, about: .tellerFinish) + Dashboard.printStatus(for: client, about: Message.tellerFinish) isWorking = false } } diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/main.swift b/BankManagerConsoleApp/BankManagerConsoleApp/main.swift index 6200659a3..4b2d77895 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/main.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/main.swift @@ -6,23 +6,6 @@ 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 { - guard let businessType = BusinessType.allCases.randomElement(), let priority = Client.Priority.allCases.randomElement() else { - return nil - } - - clients.append(Client(waitingNumber: waitingNumber, businessType: businessType, priority: priority)) - } - return clients -} - private func main() { let bank = Bank() let tellerNumber = 3 @@ -50,4 +33,21 @@ private func main() { } } +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 { + guard let businessType = BusinessType.allCases.randomElement(), let priority = Client.Priority.allCases.randomElement() else { + return nil + } + + clients.append(Client(waitingNumber: waitingNumber, businessType: businessType, priority: priority)) + } + return clients +} + main() From 92cf265f72c9bd71c483d0cb4d4b86b5a6406eeb Mon Sep 17 00:00:00 2001 From: lina0322 Date: Sun, 10 Jan 2021 09:42:36 +0900 Subject: [PATCH 10/16] =?UTF-8?q?Style:=20=EB=9D=84=EC=96=B4=EC=93=B0?= =?UTF-8?q?=EA=B8=B0=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Bank.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Bank.swift b/Bank.swift index f42c6dcd1..b054f0c98 100644 --- a/Bank.swift +++ b/Bank.swift @@ -49,7 +49,7 @@ final class Bank { } } } - for _ in 0.. Date: Sun, 10 Jan 2021 20:03:20 +0900 Subject: [PATCH 11/16] =?UTF-8?q?Fix:=20=EC=A4=91=EA=B0=84=EC=A4=91?= =?UTF-8?q?=EA=B0=84=20=EB=93=B1=EA=B8=89=EC=9D=B4=20=EC=84=9E=EC=97=AC?= =?UTF-8?q?=EC=84=9C=20=EC=8B=9C=EC=9E=91=EB=90=98=EB=8A=94=20=EA=B2=83=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit semaphore를 제거하고, dispatchGroup으로 변경 및 teller의 dispatchQueue를 사용하는 곳 변경 --- Bank.swift | 9 +++------ .../BankManagerConsoleApp/Teller.swift | 13 ++++++++----- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/Bank.swift b/Bank.swift index b054f0c98..a8754d1cc 100644 --- a/Bank.swift +++ b/Bank.swift @@ -30,7 +30,7 @@ final class Bank { } private func assignBusinessToTeller() { - let semaphore = DispatchSemaphore(value: 0) + let dispatchGroup = DispatchGroup() var isContinue = true while isContinue { @@ -41,15 +41,12 @@ final class Bank { } if teller.isNotWorking { let client = clients.removeFirst() - teller.workingQueue.async { - teller.handleBusiness(for: client) - semaphore.signal() - } + teller.handleBusiness(for: client, withDispatchGroup: dispatchGroup) self.finishedClientNumber += 1 } } } - for _ in 0.. Date: Mon, 11 Jan 2021 22:16:06 +0900 Subject: [PATCH 12/16] =?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 212b411a637a68a29d3828c6499a57af084c00ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=A6=AC=EB=82=98?= Date: Mon, 11 Jan 2021 22:30:53 +0900 Subject: [PATCH 13/16] =?UTF-8?q?Refactor:=20initClients=EB=A5=BC=20Client?= =?UTF-8?q?s=20=EA=B0=9D=EC=B2=B4=EB=A5=BC=20=EB=94=B0=EB=A1=9C=20?= =?UTF-8?q?=EB=A7=8C=EB=93=A4=EA=B3=A0,=20=EA=B7=B8=20=EC=95=88=EC=97=90?= =?UTF-8?q?=EC=84=9C=20=ED=95=A0=20=EC=88=98=20=EC=9E=88=EB=8F=84=EB=A1=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 --- Bank.swift | 2 +- .../BankManagerConsoleApp/Client.swift | 15 +++++++++++- .../BankManagerConsoleApp/main.swift | 24 +++---------------- 3 files changed, 18 insertions(+), 23 deletions(-) diff --git a/Bank.swift b/Bank.swift index a8754d1cc..d73659c0b 100644 --- a/Bank.swift +++ b/Bank.swift @@ -7,7 +7,7 @@ import Foundation final class Bank { - private var clients: [Client] = [] + private var clients: Clients = [] private var tellers: [Teller] = [] private var finishedClientNumber = 0 private var businessTime: TimeInterval? diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Client.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Client.swift index 5ba0411c6..140c2b547 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Client.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Client.swift @@ -7,7 +7,20 @@ import Foundation -final class Client { +struct Clients { + var list: [Client] = [] + + init(number: Int) { + for waitingNumber in 1...number { + guard let businessType = BusinessType.allCases.randomElement(), let priority = Client.Priority.allCases.randomElement() else { + return + } + list.append(Client(waitingNumber: waitingNumber, businessType: businessType, priority: priority)) + } + } +} + +struct Client { enum Priority: Comparable, CaseIterable { case VVIP case VIP diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/main.swift b/BankManagerConsoleApp/BankManagerConsoleApp/main.swift index 80b19f5e0..88b2c5646 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/main.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/main.swift @@ -23,31 +23,13 @@ func main() { switch command { case .start: - guard let clients = initClients(randomNumber(from: minClientNumber, to: maxClientNumber)) else { - return - } - bank.operateBank(teller: tellerNumber, client: clients) + let randomNumber = Int.random(in: minClientNumber...maxClientNumber) + let clients = Clients.init(number: randomNumber) + bank.operateBank(teller: tellerNumber, client: clients.list) case .end: isContinue = false } } } -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 { - guard let businessType = BusinessType.allCases.randomElement(), let priority = Client.Priority.allCases.randomElement() else { - return nil - } - - clients.append(Client(waitingNumber: waitingNumber, businessType: businessType, priority: priority)) - } - return clients -} - main() From 6560e848feed0f4d7b58d93f12fd28920424b509 Mon Sep 17 00:00:00 2001 From: lina0322 Date: Mon, 11 Jan 2021 22:45:31 +0900 Subject: [PATCH 14/16] =?UTF-8?q?Fix:=20Bank=20=ED=81=B4=EB=9E=98=EC=8A=A4?= =?UTF-8?q?=20=EB=82=B4=EC=97=90=EC=84=9C,=20clients=EC=9D=98=20=ED=83=80?= =?UTF-8?q?=EC=9E=85=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Bank.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Bank.swift b/Bank.swift index d73659c0b..a8754d1cc 100644 --- a/Bank.swift +++ b/Bank.swift @@ -7,7 +7,7 @@ import Foundation final class Bank { - private var clients: Clients = [] + private var clients: [Client] = [] private var tellers: [Teller] = [] private var finishedClientNumber = 0 private var businessTime: TimeInterval? From 98ed667cc835c813116f3090c200c93271fdfa3b Mon Sep 17 00:00:00 2001 From: lina0322 Date: Mon, 11 Jan 2021 22:52:15 +0900 Subject: [PATCH 15/16] =?UTF-8?q?Style:=20=EB=AA=85=EC=88=98=EB=A5=BC=20?= =?UTF-8?q?=EC=9D=98=EB=AF=B8=ED=95=98=EB=8A=94=20number=EB=8A=94=20count?= =?UTF-8?q?=EB=A1=9C=20=EB=AA=A8=EB=91=90=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Bank.swift | 12 ++++++------ .../BankManagerConsoleApp/Client.swift | 4 ++-- .../BankManagerConsoleApp/Dashboard.swift | 4 ++-- .../BankManagerConsoleApp/main.swift | 12 ++++++------ 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/Bank.swift b/Bank.swift index a8754d1cc..e90bfee7a 100644 --- a/Bank.swift +++ b/Bank.swift @@ -9,7 +9,7 @@ import Foundation final class Bank { private var clients: [Client] = [] private var tellers: [Teller] = [] - private var finishedClientNumber = 0 + private var finishedClientCount = 0 private var businessTime: TimeInterval? func operateBank(teller: Int, client: [Client]) { @@ -19,12 +19,12 @@ final class Bank { clients = client.sorted() assignBusinessToTeller() businessTime = Date().timeIntervalSince(openTime) - Dashboard.printCloseMessage(finishedClientNumber, businessTime) + Dashboard.printCloseMessage(finishedClientCount, businessTime) closeBank() } - private func initTellers(_ number: Int) { - for windowNumber in 1...number { + private func initTellers(_ count: Int) { + for windowNumber in 1...count { tellers.append(Teller(windowNumber: windowNumber)) } } @@ -42,7 +42,7 @@ final class Bank { if teller.isNotWorking { let client = clients.removeFirst() teller.handleBusiness(for: client, withDispatchGroup: dispatchGroup) - self.finishedClientNumber += 1 + self.finishedClientCount += 1 } } } @@ -52,6 +52,6 @@ final class Bank { private func closeBank() { tellers.removeAll() clients.removeAll() - finishedClientNumber = 0 + finishedClientCount = 0 } } diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Client.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Client.swift index 140c2b547..e3bbe7921 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Client.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Client.swift @@ -10,8 +10,8 @@ import Foundation struct Clients { var list: [Client] = [] - init(number: Int) { - for waitingNumber in 1...number { + init(count: Int) { + for waitingNumber in 1...count { guard let businessType = BusinessType.allCases.randomElement(), let priority = Client.Priority.allCases.randomElement() else { return } diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Dashboard.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Dashboard.swift index 762607204..34fda9128 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Dashboard.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Dashboard.swift @@ -17,12 +17,12 @@ struct Dashboard { print(message) } - static func printCloseMessage(_ number: Int, _ time: TimeInterval?) { + static func printCloseMessage(_ count: Int, _ time: TimeInterval?) { guard let time = time else { print(BankError.unknown.description) return } - let message = String(format: Message.close, number, time) + let message = String(format: Message.close, count, time) print(message) } } diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/main.swift b/BankManagerConsoleApp/BankManagerConsoleApp/main.swift index 88b2c5646..01db190c0 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/main.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/main.swift @@ -8,9 +8,9 @@ import Foundation func main() { let bank = Bank() - let tellerNumber = 3 - let maxClientNumber = 30 - let minClientNumber = 10 + let tellerCount = 3 + let maxClientCount = 30 + let minClientCount = 10 var isContinue = true while isContinue { @@ -23,9 +23,9 @@ func main() { switch command { case .start: - let randomNumber = Int.random(in: minClientNumber...maxClientNumber) - let clients = Clients.init(number: randomNumber) - bank.operateBank(teller: tellerNumber, client: clients.list) + let randomNumber = Int.random(in: minClientCount...maxClientCount) + let clients = Clients.init(count: randomNumber) + bank.operateBank(teller: tellerCount, client: clients.list) case .end: isContinue = false } From 610a87c78f680eac64ce6efb45fc9f9932f0dc78 Mon Sep 17 00:00:00 2001 From: lina0322 Date: Tue, 12 Jan 2021 00:02:55 +0900 Subject: [PATCH 16/16] =?UTF-8?q?Refactor:=20CustomStringConvertible=20pro?= =?UTF-8?q?tocol=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BankManagerConsoleApp/BankManagerConsoleApp/Client.swift | 2 +- BankManagerConsoleApp/BankManagerConsoleApp/Dashboard.swift | 4 ++-- BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift | 4 ++-- BankManagerConsoleApp/BankManagerConsoleApp/main.swift | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Client.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Client.swift index e3bbe7921..19020ec62 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Client.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Client.swift @@ -21,7 +21,7 @@ struct Clients { } struct Client { - enum Priority: Comparable, CaseIterable { + enum Priority: Comparable, CaseIterable, CustomStringConvertible { case VVIP case VIP case normal diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Dashboard.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Dashboard.swift index 34fda9128..694b5f503 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Dashboard.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Dashboard.swift @@ -13,13 +13,13 @@ struct Dashboard { } static func printStatus(for client: Client, about message: String) { - let message = String(format: message, client.waitingNumber, client.priority.description, client.businessType.description) + let message = String(format: message, client.waitingNumber, "\(client.priority)", "\(client.businessType)") print(message) } static func printCloseMessage(_ count: Int, _ time: TimeInterval?) { guard let time = time else { - print(BankError.unknown.description) + print("\(BankError.unknown)") return } let message = String(format: Message.close, count, time) diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift b/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift index 0af13b57e..1bc12495b 100644 --- a/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift +++ b/BankManagerConsoleApp/BankManagerConsoleApp/Enum.swift @@ -24,7 +24,7 @@ enum Message { static let tellerFinish = "%d번 %@고객 %@업무 완료" } -enum BusinessType: CaseIterable { +enum BusinessType: CaseIterable, CustomStringConvertible { case deposit case loan @@ -47,7 +47,7 @@ enum BusinessType: CaseIterable { } } -enum BankError: Error { +enum BankError: Error, CustomStringConvertible { case wrongInput case unknown diff --git a/BankManagerConsoleApp/BankManagerConsoleApp/main.swift b/BankManagerConsoleApp/BankManagerConsoleApp/main.swift index 01db190c0..16258eaed 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.description) + print("\(BankError.wrongInput)") continue }