리팩토링 내용

**StudyCafeLockerPass**의 이름을 **LockerPass**로 변경했습니다. 아래 내용에 두 단어가 혼용되어 있으니 이 점 양해하고 읽어주세요.

1st Refactoring

StudyCafePassMachine - run()

StudyCafePassMachine - run()

**StudyCafePassType별로 분기되어있고 분기별 각각의 로직이 있었지만 겹치는 부분이 많아 메서드getPassCandidates(StudyCafePassType)**로 추출해 if문 안의 내용을 줄였습니다.

getPassCandidates(StudyCafePassType)

2nd Refactoring

image.png

이전과 같은 맥락으로 **lockerPass**를 얻는 과정을 메서드 **getStudyCafeLockerPass()**로 추출하여 추상화 하였고, if문 분기를 없앴습니다.

StudyCafePass가 어떤 타입이든 로직이 똑같기 때문에 if문을 없애려고 했습니다. 다만 사물함을 등록할 수 있으면 물어보고 아니면 lockerPass에 null 값을 할당해showPassOrderSummary(StudyCafePass, LockerPass) 에 전달해주면 되었습니다.

그리고 **studyCafePass**와 **lockerPass**를 얻는 과정을 모두 추상화하여 메서드를 추출했습니다.

getStudyCafePass(StudyCafePassType), getStudyCafeLockerPass(StudyCafePassType, StudyCafePass)

getStudyCafePassCandidates(StudyCafePassType passType)

getLockerPassForFixedType(StudyCafePass studyCafePass)

3rd Refactoring

**StudyCafePassMachine**에서 모든 로직이 다 있는 게 하나의 클래스가 과한 책임을 가지고 있다고 판단해서 객체를 분리했습니다. StudyCafePassMachine 는 전체적인 흐름만 담당하고 pass를 얻는 과정들은 **PassGetter**라는 클래스를 새로 만들어서 담당하게 했습니다.

StudyCafePassMachine - run()

 필드 & 생성자.  ****와 ****는 다시 생성할 필요 없이  에서 주입

PassGetter 필드 & 생성자. **inputHandler**와 **outputHandler**는 다시 생성할 필요 없이 StudyCafePassMachine 에서 주입

image.png

image.png