Git Product home page Git Product logo

ios-bank-manager's Introduction

๐Ÿฆ ์€ํ–‰์ฐฝ๊ตฌ๋งค๋‹ˆ์ € README.md

ํ”„๋กœ์ ํŠธ ๊ธฐ๊ฐ„ 2022.06.27 ~ 2022.07.08

ํŒ€์› : unchain123, BaekGom/ ๋ฆฌ๋ทฐ์–ด : ์ œ์ดํฌ

๋ชฉ์ฐจ

ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ

  • LinkedList๋ฅผ ํ™œ์šฉํ•œ ํํƒ€์ž…์„ ๊ตฌํ˜„ํ•˜๊ณ  ๋™๊ธฐ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ํ†ตํ•ด ์€ํ–‰์—…๋ฌด ๊ตฌํ˜„

๊ฐœ๋ฐœ์ž ์†Œ๊ฐœ

๋ฐฑ๊ณฐ ์–ธ์ฒด์ธ
BaekGom unchain123

Preview

์•ฑ ๋™์ž‘ ํ™”๋ฉด

์€ํ–‰์—…๋ฌดํ™”๋ฉด ์ž˜๋ชป๋œ์ž…๋ ฅ ํ›„ 2๋ฒˆ์ž…๋ ฅํ•ด์„œ ์•ฑ์ข…๋ฃŒ

UML

๊ฐœ๋ฐœํ™˜๊ฒฝ ๋ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

swift xcode iOS

PR๋ฉ”์„ธ์ง€

๊ณต๋ถ€ํ•œ์ 

๊ฒฐํ•ฉ๋„ ๋ถ„๋ฆฌ

-๋ฆฌ๋ทฐ์–ด์—๊ฒŒ ๋ฐ›์€ ๋ฆฌ๋ทฐ-

  • 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

์ฐธ๊ณ ๋งํฌ

๋™์‹œ์„ฑ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

๋ฐฐ์—ด ์š”์†Œ ๋žœ๋ค ์ถ”์ถœ

Thread-sleep

ios-bank-manager's People

Contributors

unchain123 avatar baek-gom-95 avatar yagom avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.