# 은행창구매니저 [STEP1] kaki, songjun @AppleCEO 안녕하세요 도미닉! 은행창구 매니저 프로젝트 기간 동안 리뷰 잘 부탁드립니다🙂🙂🙂 ## 구현 내용 ### Linked List Queue 구현 - Linked List Queue를 구현해주기 위해 Node 클래스를 구현해주었습니다. - Heap 영역에서 인스턴스가 유지, 관리되어야 하는 Node와 달리, Queue는 필요성을 느끼지 못하여 struct로 구현해주었습니다. - Queue의 clear 메서드에서 ARC를 고려하여 head와 tail 모두 nil을 할당해주었습니다. ## 조언이 필요한 점 ### 테스트 코드 작성 시 given과 when 구분 >아래와 같이 테스트 코드 작성 시 `given`과 `when`에 무엇을 적어야할지 고민했습니다. `given`은 어떤 상황이 주어지고, `when`은 어떤 코드를 실행한다고 배웠습니다. 그렇다면 `enqueue`메서드는 `given`인지, `when`인지 궁금합니다! ```swift // 1번 func test_dequeue됐을경우_처음_enqueue된_데이터가_반환된다() { // given let expectation = "hello" // when sut.enqueue("hello") sut.enqueue("kaki") sut.enqueue("songjun") let result = sut.dequeue()! // then XCTAssertEqual(result, expectation) } // 2번 func test_dequeue됐을경우_처음_enqueue된_데이터가_반환된다() { // given let expectation = "hello" sut.enqueue("hello") sut.enqueue("kaki") sut.enqueue("songjun") // when let result = sut.dequeue()! // then XCTAssertEqual(result, expectation) } ``` # 은행창구매니저 [STEP2] kaki, songjun @AppleCEO 안녕하세요 도미닉! Step2 PR입니다! 이번 리뷰도 잘부탁드립니다! ## 구현 내용 ### Step2 요구사항 구현 - Step2 요구사항에 맞게 구현을 완료하였습니다. - 메뉴에 없는 숫자를 눌렀을 시 에러를 처리해주는 과정을 추가해줄지 고민하였는데, 요구사항에 없는 내용이라 따로 구현하지 않았습니다. - 고객이 총 몇명인지 확인할 수 있게 Queue 내부에 `size` 프로퍼티를 추가해주었습니다. ## 조언이 필요한 점 ### BankManager 내부에서의 함수 분리 - BankManager 구조체 내부에 `setupWaitingQueueAndClientNumber`, `startBusiness`메서드가 있습니다. - 이 메서드 내부에는 여러기능들이 존재합니다. 크게보면 업무시작과 함께 기능하는 작동들이라 한 메서드에 정의해주었는데, 이 기능들을 세분화할 경우 main에서 코드를 진행시킬 때 여러 함수들을 실행시켜야 해서 고민이 됩니다. - 기준을 크게 잡아 한 번에 실행시킨 지금의 방식이 좋을지, 아니면 조금 더 세분화하여 여러개의 함수를 실행시키는 방식이 좋을지 조언 주시면 감사하겠습니다. ```swift mutating func setupWaitingQueueAndClientNumber() { for number in 1...Int.random(in: 10...30) { waitingQueue.enqueue("\(number)번 고객") } clientNumber = waitingQueue.size } mutating func startBusiness() { while !waitingQueue.isEmpty { guard let client = waitingQueue.dequeue() else { return } print("\(client) 업무 시작") Thread.sleep(forTimeInterval: 0.7) print("\(client) 업무 완료") } let businessHours = Double(clientNumber) * 0.7 print("업무가 마감되었습니다. 오늘 업무를 처리한 고객은 총 \(clientNumber)명이며, 총 엄무시간은 \(String(format: "%.2f", businessHours))초입니다.") } ```