ํ๋ก์ ํธ ๊ธฐ๊ฐ 2022.06.27 ~ 2022.07.08
ํ์ : unchain123, BaekGom/ ๋ฆฌ๋ทฐ์ด : ์ ์ดํฌ
- LinkedList๋ฅผ ํ์ฉํ ํํ์ ์ ๊ตฌํํ๊ณ ๋๊ธฐ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ํตํด ์ํ์ ๋ฌด ๊ตฌํ
๋ฐฑ๊ณฐ | ์ธ์ฒด์ธ |
---|---|
BaekGom | unchain123 |
์ํ์ ๋ฌดํ๋ฉด | ์๋ชป๋์ ๋ ฅ ํ 2๋ฒ์ ๋ ฅํด์ ์ฑ์ข ๋ฃ |
---|---|
-๋ฆฌ๋ทฐ์ด์๊ฒ ๋ฐ์ ๋ฆฌ๋ทฐ-
- STEP2 PR์ดํ ์ฝ๋๋ด์ ์ํ์ ๊ฒฐํฉ๋๊ฐ ๋๋ฌด ๋์์ ์ด ๊ฒฐํฉ๋๋ฅผ ๋ถ๋ฆฌํด์ฃผ๋๊ฒ ์ข๊ฒ ๋ค๋ ๋ฆฌ๋ทฐ์ด์ ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ์์ต๋๋ค.
- ์ฒ์์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๊ธฐ ์ํด ํํ ๋ฐฉ๋ฒ์ ํ๋กํ ์ฝ์ ์์ฑํด์ ์์กด์ฑ ์ฃผ์ ์ ํด์ฃผ๋ ๋ฐฉ๋ฒ์ด์์ต๋๋ค.
- ํ์ง๋ง ํ๋กํ ์ฝ์ ์ ํํ ๋๋ ๊ฐ์ฒด๋ค์ด ํด์ผํ ์ผ(func)์ด ๊ณตํต์ ์ผ๋ก ์๊ฑฐ๋, ๊ณตํต์ ์ผ๋ก ๊ฐ์ง๊ณ ์์ด์ผํ๋ ๋ณ์๊ฐ ์์ ๋ ์ฌ์ฉํ๋๋ฐ ํ๋กํ ์ฝ๋ก ๋ง๋ค์ด์ค ์ํ์์ ์ํ ๋ง๊ณ ๋ค๋ฅธ ๊ฐ์ฒด์์ ์ฌ์ฉํ ์ด์ ๊ฐ ์์๊ณ ์ถํ ์ํ์์ ์๊ฐ ์ฌ๋ฌ๋ช ์ด ๋๋ค๋ฉด ์ด ํ๋กํ ์ฝ์ ์ฌ์ฉํ์ง ๋ชปํ๋ ๊ฒ ๊ฐ๋ค๋ ๋ฆฌ๋ทฐ์ด์ ์๊ฒฌ์ ๋ฃ๊ณ ๋ค์ ์์ ํ์ต๋๋ค.
struct Bank {
private var customer: BankItemQueue<Customer>
private let bankmanager: BankManager
init(customer: BankItemQueue<Customer>, bankmanager: BankManager) {
self.customer = customer
self.bankmanager = bankmanager
}
}
- ์์ ์ฝ๋ ์ฒ๋ผ ์ด๋์ ๋ผ์ด์ ๋ฅผ ๋ง๋ค์ด์ ์ํ์์ ์ํ์์ ์ธ์คํด์ค๋ฅผ ๋ฐ๋๊ฒ ์๋๋ผ ์ํ์ด ๋ง๋ค์ด์ง ๋ ๊ฐ์ด ์์ฑํด ์ค์ผ๋ก์จ ์์กด์ ์ฃผ์ ์ ์์ผ์ฃผ์ด ๊ฒฐํฉ๋๋ฅผ ๋ฎ์์ง๊ฒ ํด์ฃผ์์ต๋๋ค.
- sleep ์ Int ํ์ ์ผ๋ก๋ง ์ค์ ์ด ๊ฐ๋ฅํด ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑ ์ํค์ง ๋ชปํ์ต๋๋ค ๊ทธ๋์ ulseep ์ผ๋ก ๋ณ๊ฒฝํ์์ง๋ง 1000000 ๋จ์๋ก ์ฒ๋ฆฌ๋ฅผํด ์ค๊ฐ๊ณ์ฐ์ผ๋ก ์ฒ๋ฆฌ๋ฅผ ํด์ค์ผํ๋ ๋ถํธํจ์ด ์๊ฒจ Thread.sleep์ด ์ฌ์ฉ์ฑ๊ณผ ๊ฐ๋ ์ฑ์ด ๋์ ์ฑํํ์ต๋๋ค
Thread.sleep(forTimeInterval: customer.bankingType.bankingProcessingTime)
- DispatchSemaphore ๋ก ์๊ธ,๋์ถ ์ ๋ฌด์ ์ ๊ทผํ ์์๋ ์ค๋ ๋ ์ ๋ฅผ ์ ํํ์ฌ ๋์ผํ ๋ฐฐ์ด์์์ ๋ค๋ฅธ ์ฐ๋ ๋๊ฐ ์ ๊ทผ ๋ชปํ๊ฒ ํ์ต๋๋ค.
- ํด๊ฒฐํ ์ฝ๋
private let depositSemaphore = DispatchSemaphore(value: NumberOfBankManager.deposit.rawValue)
private let loanSemaphore = DispatchSemaphore(value: NumberOfBankManager.loan.rawValue)
private func giveTask(for customerList: BankItemQueue<Customer>) {
var customerList = customerList
while let completeCustomer = customerList.deQueue() {
DispatchQueue.global().async(group: bankingGroup) {
switch completeCustomer.bankingType {
case .deposit:
self.depositSemaphore.wait()
self.bankmanager.handleBanking(for: completeCustomer)
self.depositSemaphore.signal()
case .loan:
self.loanSemaphore.wait()
self.bankmanager.handleBanking(for: completeCustomer)
self.loanSemaphore.signal()
}
}
}
}
- ์ฒ์ UnitTest์์ฑ์ testable์ ์ฌ์ฉํด์ ์งํํ๋ ค๊ณ ํ ๋ ์๋์ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํด์ scheme์ ์ถ๊ฐํ๊ณ ํ๊ฒ์ ์ค์ ํด์ ํด๊ฒฐ์ ํ์ต๋๋ค.
๋ฌธ์ ํ๋ฉด | ํด๊ฒฐ๋ฐฉ๋ฒ | ํด๊ฒฐ๋ฐฉ๋ฒ2 |
---|---|---|
- ๊ทธ ํ์ UItest ์งํ์ ์๋์ ๊ฐ์ ์๋ฌ๊ฐ unchain์ ๋งฅ(M1)์์๋ง ๋ฐ์ํ๊ณ baekgom์ ๋งฅ(Intel)์์๋ ๋ฐ์ํ์ง ์์์ต๋๋ค.
Could not find module 'BankManagerConsoleApp' for target 'x86_64-apple-
macos'; found: arm64-apple-macos,
at:/Users/kay/Library/Developer/Xcode/DerivedData/BankManagerConsoleApp-
acslyqhrplbojmgnotygnhtucvdv/Index/Build/Products/Debug/BankManagerConsoleApp
.swiftmodule
- ๋ฆฌ๋ทฐ์ด ๋ต๋ณ
๊ด๋ จ๋ ์ค๋ฅ๋ ์ฐพ์๋ดค๋๋ ์ผ๋จ ํด๋จผ์๋ฌ๋ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. M1๊ณผ Intel๋งฅ์ ์ฐจ์ด๋ผ๊ธฐ๋ณด๋ค๋ M1์์ ์ฌ์ฉํ ๋ ๋ฌธ์ ๊ฐ ์๋ ๊ฒฝ์ฐ์ธ ๊ฒ ๊ฐ์ต๋๋ค. ๊ด๋ จ๋ ์ง๋ฌธ๋ค๊ณผ ๋ต๋ณ์ด forum์ ์์ผ๋ ํ ๋ฒ ์ฐธ๊ณ ํด๋ณด์๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค. ๐๐ป Apple forum