Skip to content

은행창구 매니저 프로젝트 저장소입니다.

Notifications You must be signed in to change notification settings

kimdj1102/ios-bank-manager

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

은행 창구 관리 앱

프로젝트 진행자: Jin @wlsdud-dev, Loffy @kimdj1102

리뷰어: 다나 @songda515


프로젝트 요구사항

  • Queue 타입 구현을 위한 Linked-list 타입을 직접 구현합니다.
  • Queue 타입은 다양한 타입의 데이터를 취급할 수 있도록 스위프트의 Generics 기능을 활용합니다.
  • Queue 타입이 예상한대로 동작하는지 Unit Test를 통해 동작을 검증합니다.
    • Queue에 구현해야 할 필수 기능
      • Enqueue, Dequeue, Clear, Peek, isEmpty
  • 모든 고객의 업무가 끝나면 은행업무를 마감합니다.
  • 업무를 마감할 때 "업무가 마감되었습니다. 오늘 업무를 처리한 고객은 총 XX명이며, 총 업무시간은 XX초입니다."라고 출력합니다.
  • 은행원은 고객의 업무를 처리합니다.
  • 은행원이 한 번에 처리할 수 있는 고객은 한 명입니다.
  • 대기중인 고객의 업무처리를 시작할 때 아래와 같이 출력합니다.
    • "3번 고객 업무 시작"
  • 고객의 업무를 처리하면 아래와 같이 출력합니다.
    • "5번 고객 업무 완료"
  • 은행에는 3명의 은행원이 근무합니다.
    • 2명의 은행원은 예금업무를, 1명의 은행원은 대출업무를 처리합니다.
    • 고객의 업무 종류는 고객 생성시 임의로 지정합니다.
  • 한 명의 은행원은 한 명의 고객을 응대할 수 있습니다.
  • 고객이 원하는 업무의 종류와 소요시간은 아래와 같습니다.
    • 대출 : 1.1초
    • 예금 : 0.7초
  • 대기중인 고객의 업무처리를 시작할 때 아래와 같이 출력합니다.
    • "3번 고객 대출업무 시작"
  • 고객의 업무를 처리하면 아래와 같이 출력합니다.
    • "11번 고객 예금업무 완료"

구현 사항

vduE T 2024-02-085 16 04-ezgif com-video-to-gif-converter

고민한점

자료구조

배열은 첫번째와 중간의 값을 추가 / 삭제 하려면 배열안에 값을 하나씩 이동시켜줘야 하기 때문에 O(n)이라는 시간 복잡도가 생긴다. 하지만 링크드 리스트라면 노드의 링크만 바꿔주면 되기에 시간 복잡도가 O(1)이 나와 더 효율적이다.

은행 창구 관리앱 프로젝트는 FIFO구조를 갖기 때문에 링크드 리스트의 tail을 추가하여 시간복잡도 O(1)인 Queue를 만들어 주었다.

비동기처리

대출과 예금 업무는 동시에 처리하며 업무가 처리되는 동안에는 다른 업무를 받을 수 없다는 제약 조건을 해결하기 위해 동기 / 비동기, 작업중 접근 제어가 필요하여 GCD를 이용해 구현 하였습니다.

은행원이 업무를 처리는 DispatchQueue 를 이용해 비동기 처리를 하였고 처리하는 동안 다른 업무를 받지 못하도록 DispatchSemaphore 를 이용해 접근을 제한 시켜 줬습니다.

MVC패턴

이번 프로젝트는 Xcode Consol 창을 이용해 개발을 진행 하였다. 그렇기에 View가 존재하지 않았지만 Consol을 View라고 가정하여 MVC패턴을 적용 했다. Manager를 Contoller로 뷰를 소유하여 갱신해주고 Bank는 Model로 Queue를 사용해 작업을 처리하여 Manager에게 전달한다. 클래스 다이어그램을 확인해보면 Model과 View는 관계성을 가지지 않는다.

About

은행창구 매니저 프로젝트 저장소입니다.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Swift 100.0%