Skip to content

Commit

Permalink
feat: 접근제어자 추가 및 프로그램 실행 함수 구현 #4
Browse files Browse the repository at this point in the history
  • Loading branch information
July911 committed Dec 24, 2021
1 parent b1c69fa commit d7d75bb
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 28 deletions.
11 changes: 7 additions & 4 deletions BankManagerConsoleApp/BankManagerConsoleApp/main.swift
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import Foundation

struct MenuHandler {

enum Menu: String {
case one = "1"
case two = "2"
Expand Down Expand Up @@ -30,12 +29,16 @@ struct MenuHandler {
}
}

func setBankWithRandomCustomer() {
private func setBankWithRandomCustomer() {
let randomNumberOfCustomer = Int.random(in: 10...30)
var bank = Bank(numberOfBankClerk: 1, numberOfCustomer: randomNumberOfCustomer)
bank.openBank()
}
}

var menuHandler = MenuHandler()
menuHandler.startToReceiveInput()
func startBankManager() {
let menuHandler = MenuHandler()
menuHandler.startToReceiveInput()
}

startBankManager()
47 changes: 23 additions & 24 deletions BankManagerConsoleApp/Model/Bank.swift
Original file line number Diff line number Diff line change
@@ -1,20 +1,26 @@
import Foundation

struct Bank {
var bankClerk: DispatchQueue = DispatchQueue(label: "customSerial")
var customers: CustomerQueue = CustomerQueue<Customer>()
var numberOfCustomer: Int = 0
let dispatchGroup = DispatchGroup()
// MARK: - Properties
private var bankClerk: DispatchQueue = DispatchQueue(label: "customSerial")
private var customers: CustomerQueue = CustomerQueue<Customer>()
private var numberOfCustomer: Int = 0
private let dispatchGroup = DispatchGroup()

// MARK: - Initalizer
init(numberOfBankClerk: Int, numberOfCustomer: Int) {
for index in 0..<numberOfCustomer {
let customer = Customer(number: (index + 1))
customers.enqueue(value: customer)
}

instantiateCustomers(of: numberOfCustomer)
self.numberOfCustomer = numberOfCustomer
}

// MARK: - Methods
private func instantiateCustomers(of number: Int) {
for index in 0..<number {
let customer = Customer(number: (index + 1))
customers.enqueue(value: customer)
}
}

func openBank() {
dispatchGroup.enter()
let totalTime = checkTotalTime(of: handleTaskOfAllCustomers)
Expand All @@ -24,22 +30,18 @@ struct Bank {
notifyBankClosing(with: totalTime)
}

func checkTotalTime(of taskFunction: () -> Void) -> String {
private func checkTotalTime(of taskFunction: () -> Void) -> String {
let startTime = CFAbsoluteTimeGetCurrent()

taskFunction()

let totalTime = CFAbsoluteTimeGetCurrent() - startTime

let totalTimeInString: String = String(format: "%.2f", totalTime)

return totalTimeInString
}

func handleTaskOfAllCustomers() {
private func handleTaskOfAllCustomers() {
let taskItem = DispatchWorkItem {
if let currentCustomer = customers.peek {
print(currentCustomer.number)
workOnTask(of: currentCustomer)
}
}
Expand All @@ -49,12 +51,9 @@ struct Bank {
}
}

func workOnTask(of customer: Customer) {
private func workOnTask(of customer: Customer) {
notifyStartingTask(of: customer)

let taskOfCustomer = customer.task
taskOfCustomer()

customer.task()
notifyFinisingTask(of: customer)

do {
Expand All @@ -63,16 +62,16 @@ struct Bank {
print(error)
}
}

func notifyStartingTask(of customer: Customer) {
private func notifyStartingTask(of customer: Customer) {
print("\(customer.number)번 고객 업무 시작")
}

func notifyFinisingTask(of customer: Customer) {
private func notifyFinisingTask(of customer: Customer) {
print("\(customer.number)번 고객 업무 완료")
}

func notifyBankClosing(with totalTime: String) {
private func notifyBankClosing(with totalTime: String) {
print("업무가 마감되었습니다, 오늘 업무를 처리한 고객은 총 \(numberOfCustomer)명이며, 총 업무시간은 \(totalTime)초 입니다.")
}
}

0 comments on commit d7d75bb

Please sign in to comment.