Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
프로젝트 구조
Data
Member
도메인을 다룰 데이터 계층을 생성했습니다.
은행에 고객이 가입 시, 이름과 생년월일만을 받도록 했기 때문에 이름과 생년월일 받아 객체를 생성하는 생성자를 두었습니다.
나머지 요소들을 가입과 동시에 주입받도록 했습니다.
Controller
MainAction
enum클래스를 활용하여 사용자가 은행 업무명을 잘못 입력하였을 경우의 예외처리를 하고자 했습니다.
SavingAction
메인 액션인 예적금에는 '입금', '출금', '계좌이체' 이렇게 3가지의 세부 행동이 파생되므로 별도로 enum클래스를 만들어주었습니다.
BankController
컨트롤러 계층에서는 해당 업무에 맞는 사용자의 입력만을 받고 서비스 계층으로 구체적 행동을 위임해주도록 했습니다.
때문에 컨트롤러에서는 사용자 입력에 대한 예외처리만 해두었고, 서비스 객체를 생성하여 사용자의 입력을 서비스 계층에 넘겨주도록 했습니다.
Repository
BankRepository
데이터를 건드릴 레포지토리 계층에 은행 업무에 필요한 레포지토리의 역할을 명시한 인터페이스를 만들었습니다.
MemoryBankRepository
현재는 따로 데이터베이스를 사용하지 않으므로 Memory라는 키워드를 붙혀 구현 클래스를 만들었습니다.
해쉬맵을 이용하여 계좌번호를 키값으로 가입한 멤버 객체들을 관리하고자 했습니다.
Service
BankService
은행 서비스에 필요한 업무들을 명시한 인터페이스를 만들었습니다.
BankServiceImpl
가입
사용자로부터 입력받은 이름과 생년월일을 바탕으로 은행 레포지토리에서 받아온 Optional를 이용했습니다.
만약 기존에 이름과 생년월일이 동일한 사용자가 있는지 isEmpty() 메서드를 이용하여 예외처리 했습니다.
잔액조회
마찬가지로 이름과 생년월일을 통해 Optional를 받아온 후, 만약 존재한다면 잔액을 출력해주었습니다.
전체계좌조회
은행 레포지토리를 통해 받아온 Member 리스트를 순회하며 모든 멤버 정보를 출력해주었습니다.
입금, 출금, 계좌이체
이전 서비스들과 동일하게 사용자 정보를 레포지토리를 통해 Optional 객체를 받아온 후,
Member 클래스의 set과 get을 통해 적절한 행동을 취해주었습니다.
고민한 부분들